I'm working on FreeBSD 6.2 and I'm wondering if anybody can help with an
issue I've found using fork and threads. The attached program
demonstrates the problem. In short, if a process creates a thread, joins
the thread, then forks a child process which creates a thread, the
child's attempt to create a thread will cause the program to dump core
with the following error message:
Fatal error 'mutex is on list' at line 540 in file
/usr/src/lib/libpthread/thread/thr_mutex.c (errno = 0).

This seems to be true using an SMP or UP kernel.

If you run the attached program with no arguments, the parent process
will not create and join a thread and will not crash. Here is the
output:
[Sherlock]$ ./threadTest
child: born
child: thread created
child: thread joined
parent: child died

If you run the attached program with "-crash", the parent process
creates and joins a thread, causing the error:
[Sherlock]$ ./threadTest -crash
parent: thread created
parent: thread joined
child: born
Fatal error 'mutex is on list' at line 540 in file
/usr/src/lib/libpthread/thread/thr_mutex.c (errno = 0)
parent: child died

Here is the backtrace of the resulting core:
#0  0x28097537 in pthread_testcancel () from /lib/libpthread.so.2
[New Thread 0x8053200 (LWP 100163)]
[New Thread 0x8053000 (LWP 100201)]
(gdb) where
#0  0x28097537 in pthread_testcancel () from /lib/libpthread.so.2
#1  0x2808689a in sigaction () from /lib/libpthread.so.2
#2  0x2808088d in pthread_kill () from /lib/libpthread.so.2
#3  0x28080256 in raise () from /lib/libpthread.so.2
#4  0x28159b78 in abort () from /lib/libc.so.6
#5  0x28097c6f in pthread_testcancel () from /lib/libpthread.so.2
#6  0x2808c85f in _pthread_mutex_trylock () from /lib/libpthread.so.2
#7  0x2808d590 in _pthread_mutex_lock () from /lib/libpthread.so.2
#8  0x28083361 in _spinlock () from /lib/libpthread.so.2
#9  0x280f7ddb in _UTF8_init () from /lib/libc.so.6
#10 0x28172940 in _thread_autoinit_dummy_decl_stub () from
/lib/libc.so.6
#11 0x28074200 in ?? ()
#12 0x2804f405 in symlook_obj () from /libexec/ld-elf.so.1
#13 0x280883ff in pthread_attr_init () from /lib/libpthread.so.2
#14 0x280848fd in sigaction () from /lib/libpthread.so.2
#15 0x2808e915 in pthread_mutexattr_init () from /lib/libpthread.so.2
#16 0x28088116 in pthread_create () from /lib/libpthread.so.2
#17 0x08048795 in spawnThread (caller=0x80489f0 "child") at
threadTest.c:21
#18 0x08048879 in main (argc=2, argv=0x17e) at threadTest.c:62

Any help would be greatly appreciated. 

-Shaun

Attachment: Makefile
Description: Makefile

Attachment: threadTest.c
Description: threadTest.c

_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "[EMAIL PROTECTED]"

Reply via email to