Currently lang/lua links the 'lua' binary without -pthread flag; this results in any call to 'pthread_create' to completely hang the program. Normally this wouldn't be an issue, since Lua doesn't use any threading functions, but the problem propagates to all the C extensions as well. For example, if you'll install devel/lgi (the GObject/Gtk bindings), and try this simple program: $ lua-5.1 Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > lgi = require 'lgi' > gtk = lgi.Gtk > gtk.FileChooserDialog {} .. it will hang at this point. The reason being that Gtk uses threads internally and tries to spawn a few when you create a FileChooser object. That is to say, this problem makes lang/lgi basically unusable, and prevents any kind of Lua Gtk programs working on FreeBSD. More directly, you can create an extension that calls 'pthread_create': $ cat >test.c <<'EOF' #include <lauxlib.h> #include <lua.h> #include <pthread.h> #include <stdio.h> static void * thread_func(void *arg) { pthread_exit(0); } static int test(lua_State *L) { pthread_t thread; printf("PTHREAD CREATE\n"); pthread_create(&thread, NULL, thread_func, NULL); printf("PTHREAD JOIN\n"); pthread_join(thread, NULL); printf("DONE\n"); } static const struct luaL_Reg lib[] = { {"test", test}, {NULL, NULL} }; LUALIB_API int luaopen_test(lua_State *L) { #if LUA_VERSION_NUM < 502 luaL_register(L, "test", lib); #else luaL_newlib(L, lib); #endif return 1; } EOF $ cc -I/usr/local/include/lua51 -shared -pthread -fPIC -o test.so test.c $ lua-5.1 Lua 5.1.5 Copyright (C) 1994-2012 Lua.org, PUC-Rio > test = require "test" > test.test() PTHREAD CREATE .. and again, it hangs. Fix: See the attached patch. With it both 'lua' and 'lua.so' link with -pthread. Note that lang/lua52 and lang/luajit are affected too, but this PR only deals with lang/lua. Patch attached with submission follows:
Responsible Changed From-To: freebsd-ports-bugs->lua Over to maintainer (via the GNATS Auto Assign Tool)
Author: mandree Date: Mon Aug 5 20:37:35 2013 New Revision: 324286 URL: http://svnweb.freebsd.org/changeset/ports/324286 Log: Link lua .so + program with pthread to prevent hangs in extensions that use pthreads. Bump PORTREVISION to pull this in. PR: ports/181052 Submitted by: Vitaly Magerya <vmagerya@gmail.com> Approved by: mandree@ on behalf of lua@ Modified: head/lang/lua/Makefile head/lang/lua/files/patch-src-Makefile head/lang/lua52/Makefile Modified: head/lang/lua/Makefile ============================================================================== --- head/lang/lua/Makefile Mon Aug 5 20:21:58 2013 (r324285) +++ head/lang/lua/Makefile Mon Aug 5 20:37:35 2013 (r324286) @@ -3,7 +3,7 @@ PORTNAME= lua PORTVERSION= 5.1.5 -PORTREVISION= 5 +PORTREVISION= 6 CATEGORIES= lang MASTER_SITES= http://www.lua.org/ftp/ \ ftp://ftp.ntua.gr/pub/lang/lua/ \ @@ -33,7 +33,7 @@ MAKE_ENV= LUA_SONAME="liblua-${LUA_VER}. MAKE_ARGS= __MAKE_CONF=${NONEXISTENT} # liblua.so requires libm, so make sure it has an explicit dependency # so that applications need not second-guess lua's dependencies. -LDFLAGS+= -lm +LDFLAGS+= -lm -pthread MAN1= lua-${LUA_VER}.1 luac-${LUA_VER}.1 DOCSDIR= ${PREFIX}/share/doc/${LUA_SUBDIR} Modified: head/lang/lua/files/patch-src-Makefile ============================================================================== --- head/lang/lua/files/patch-src-Makefile Mon Aug 5 20:21:58 2013 (r324285) +++ head/lang/lua/files/patch-src-Makefile Mon Aug 5 20:37:35 2013 (r324286) @@ -1,6 +1,6 @@ ---- Makefile.orig 2008-01-19 17:37:58.000000000 -0200 -+++ Makefile 2008-08-10 16:00:41.000000000 -0300 -@@ -9,7 +9,8 @@ +--- Makefile.orig 2012-02-13 22:41:22.000000000 +0200 ++++ Makefile 2013-08-05 15:56:32.000000000 +0300 +@@ -9,10 +9,11 @@ CC= gcc CFLAGS= -O2 -Wall $(MYCFLAGS) @@ -9,7 +9,11 @@ +AR= ar RANLIB= ranlib RM= rm -f - LIBS= -lm $(MYLIBS) +-LIBS= -lm $(MYLIBS) ++LIBS= -lm -pthread $(MYLIBS) + + MYCFLAGS= + MYLDFLAGS= @@ -31,12 +32,13 @@ LUA_T= lua Modified: head/lang/lua52/Makefile ============================================================================== --- head/lang/lua52/Makefile Mon Aug 5 20:21:58 2013 (r324285) +++ head/lang/lua52/Makefile Mon Aug 5 20:37:35 2013 (r324286) @@ -3,6 +3,7 @@ PORTNAME= lua PORTVERSION= 5.2.2 +PORTREVISION= 1 CATEGORIES= lang MASTER_SITES= http://www.lua.org/ftp/ @@ -30,7 +31,7 @@ MAKE_ENV= LUA_SONAME="liblua-${LUA_VER}. MYCFLAGS="${CFLAGS}" MYLDFLAGS="${LDFLAGS}" # liblua.so requires libm, so make sure it has an explicit dependency # so that applications need not second-guess lua's dependencies. -LDFLAGS+= -lm +LDFLAGS+= -lm -pthread MAN1= lua-${LUA_VER}.1 luac-${LUA_VER}.1 DOCSDIR= ${PREFIX}/share/doc/${LUA_SUBDIR} _______________________________________________ svn-ports-all@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-ports-all To unsubscribe, send any mail to "svn-ports-all-unsubscribe@freebsd.org"
Responsible Changed From-To: lua->osa Vitaly, thanks for submitting this excellent problem report and patch. I have committed the change for lang/lua (5.1) and lua52. Sergey, please see if this is required for luajit, and after that, pass it on to the lua50 maintainer. Thank you.
Is this PR still relevant?
(In reply to Carlo Strub from comment #4) > Is this PR still relevant? Yes. While lang/lua51 and lang/lua52 are fixed, lang/luajit is still broken as described.
Maybe Matthias has an idea.
Sorry, no idea - and I'm for now not using lua very much, and as a consequence, I quit the lua@ team months ago.
Back to pool
Over to maintainer
Over to osa lua ports are fixed while I don't know for luajit, osa being the maintainer of luajit I'll let him decide. Please also not that a work is being done on FreeBSD current (not yet committed at that time which will make this PR irrelevant Reference: https://lists.freebsd.org/pipermail/freebsd-arch/2014-December/016550.html
Any advance here? Please, maintainer feedback!
port lua does not exist anymore. lua51, lua52 and lua53 shows all LDFLAGS+= -lm -pthread The Makefile are complete reworked. It is overcome by events.
The last remaining problem is in lang/luajit.
see Bug #191476.