summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--open_issues/libpthread_dlopen.mdwn20
1 files changed, 20 insertions, 0 deletions
diff --git a/open_issues/libpthread_dlopen.mdwn b/open_issues/libpthread_dlopen.mdwn
index f60c81a4..0cd761f2 100644
--- a/open_issues/libpthread_dlopen.mdwn
+++ b/open_issues/libpthread_dlopen.mdwn
@@ -14,6 +14,9 @@ IRC, OFTC, #debian-hurd, 2011-07-21.
<youpi> there's one known issue with pthreads
<youpi> you can't dlopen() it
+
+[ if the main application is not already linked against it ]
+
<youpi> which also means you can't dlopen() a module which depends on it if
the main application hasn't used -lpthread already
<youpi> (so as to get libpthread initialized early, not at the dlopen()
@@ -34,3 +37,20 @@ IRC, OFTC, #debian-hurd, 2011-07-21.
<lucas> it would need fixing in lua, not in SG, then, right?
<youpi> yes
<lucas> ok, thanks
+
+The fix thus being: link the main application with -lpthread.
+
+The same symptom appears in an odd case, for instance:
+
+
+buildd@hurd:~$ ldd /usr/bin/openjade
+ libthreads.so.0.3 => /lib/libthreads.so.0.3 (0x0103d000)
+ libosp.so.5 => /usr/lib/libosp.so.5 (0x01044000)
+ libpthread.so.0.3 => /lib/libpthread.so.0.3 (0x01221000)
+ libnsl.so.1 => /lib/i386-gnu/libnsl.so.1 (0x01232000)
+...
+
+openjade links against *both* libthreads and libpthread. The result is that libc
+early-initializes libthreads only, and thus libpthread is not early-initialized,
+and later on raises assertions. The solution is to just get rid of libthreads,
+to have only one threading library.