2009/3/14 Neil Jerram
<address@hidden>
> It's very strange but I see an only one thread. full Backtrace in attach.
That is indeed odd. Are you using GDB, and the "info threads"
command, and it lists only one thread?
> > #0 0x00002b4ba31b4004 in __lll_lock_wait () from /lib64/libpthread.so.0
> > #1 0x00002b4ba31af944 in _L_lock_55 () from /lib64/libpthread.so.0
> > #2 0x00002b4ba31af341 in pthread_mutex_lock () from /lib64/
> libpthread.so.0
> > #3 0x00002b4ba22f87dc in scm_i_thread_put_to_sleep () from /usr/lib64/
> > libguile.so.17
> > #4 0x00002b4ba22abfd9 in scm_i_gc () from /usr/lib64/libguile.so.17
> > #5 0x00002b4ba22ac338 in scm_gc_for_newcell () from /usr/lib64/
> libguile.so.17
> > #6 0x00002b4ba22cc86f in scm_cons () from /usr/lib64/libguile.so.17
This backtrace indicates the GC thread trying to lock the "heap mutex"
of all other threads (however many there are), and blocking on one of
those.
(Or possibly the thread_admin_mutex. Can you get line numbers and
match those against your source code, to see if the relevant line in
scm_i_thread_put_to_sleep is
scm_i_pthread_mutex_lock (&thread_admin_mutex);
or
scm_i_pthread_mutex_lock (&t->heap_mutex);
?)
This could happen if your application has another thread that is in
Guile mode but has blocked on something - e.g. select, read, locking
another mutex. Is that possible?