Can anyone help to shed the light on mysterious bug in SBCL (probably)?
Matthew Dillon
dillon at apollo.backplane.com
Tue Apr 15 18:15:17 PDT 2014
:I finally found the problem! This happens when the library is loaded TWICE
:(one time at compile time, one time in load time in IOLIB) and calls
:dlclose between two dlopens. Here is a minimal test case in lisp:
:
:(defpackage test
: (:use :cl :cffi))
:(eval-when (:compile-toplevel :load-toplevel :execute)
: (define-foreign-library libfixposix
: (t (:default "libfixposix")))
: (use-foreign-library libfixposix))
I've looked at this some more. I think the problem might be that
the code is trying to load a *different* libpthread.so or libthread_xu.so
than the one that is being loaded at load time.
The dynamic loader seems to work properly in my tests when I load the
same library as the one that was preloaded by the executable, but fails
if I load one that the dynamic loader thinks is different.
I don't think you can use 'find' for your test... some of those
libraries (such as libthread_xu) have one-time inits that will
interfere with each other. You'll have to try to recreate the exact
circumstances of what the program is doing.
Use 'ldd' to figure out which library is being preloaded and compare
against the libraries it is trying to load by hand. The program really
has no business whatsoever trying to load pthreads or libthread_xu by
hand... it should be preloaded only.
-Matt
More information about the Users
mailing list