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
Makefile
Description: Makefile
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]"