missing error-checking in libpthread?

Dan Nelson dnelson at allantgroup.com
Thu Apr 8 08:05:55 PDT 2004


I'm seeing the following stack trace in a testsuite for a threaded
program.  At the time I generated the coredump, the process was in a
loop calling kse_release({0,1000000}) about 1.5 million times/sec,
every call returning EINVAL.

There are three calls to kse_release in thr_kern.c and one in
thr_sig.c, none of which check the returnvalue.  The call in thr_sig.c
and two of the calls in thr_kern.c even have code after kse_release()
as if they expected the call to return (which it shouldn't under normal
circumstances).  One call in thr_kern.c has a /* Never reach */ commect
after the call to kse_release, but again, no checks or calls to abort()
if it does happen.

(gdb) where
#0  0x282304db in kse_release () at {standard input}:15
#1  0x28228658 in _kse_lock_wait (lock=0x829b438, lu=0x83f2334)
    at /usr/src/lib/libpthread/thread/thr_kern.c:485
#2  0x282313c3 in _lock_acquire (lck=0x829b438, lu=0x83f2334, prio=22)
    at /usr/src/lib/libpthread/sys/lock.c:219
#3  0x28220499 in _pthread_sigmask (how=3, set=0x853531c, oset=0x0)
    at /usr/src/lib/libpthread/thread/thr_sigmask.c:64
#4  0x28220396 in _sigprocmask (how=3, set=0x853531c, oset=0x0)
    at /usr/src/lib/libpthread/thread/thr_sigprocmask.c:49
#5  0x282282e9 in _kse_single_thread (curthread=0x8535200)
    at /usr/src/lib/libpthread/thread/thr_kern.c:354
#6  0x2821d9bf in _fork () at /usr/src/lib/libpthread/thread/thr_fork.c:97
#7  0x080bf71e in f_create_process (args=1)
    at /usr/tmp/pike/src/signal_handler.c:3310
#8  0x08072e18 in low_mega_apply (type=APPLY_LOW, args=1, arg1=0x8309be0,
    arg2=0x6) at /usr/tmp/pike/src/apply_low.h:214
#9  0x08073e80 in mega_apply (type=APPLY_LOW, args=1, arg1=0x888d0c8, arg2=0x6)
    at /usr/tmp/pike/src/interpret.c:1981
#10 0x080d64a9 in call_pike_initializers (o=0x888d0c8, args=1)
    at /usr/tmp/pike/src/object.c:337
#11 0x080d6595 in debug_clone_object (p=0x830fd00, args=1)
    at /usr/tmp/pike/src/object.c:363
#12 0x08073963 in low_mega_apply (type=APPLY_SVALUE_STRICT, args=1,
    arg1=0x835cdc8, arg2=0x0) at /usr/tmp/pike/src/interpret.c:1718
#13 0x08070c14 in jump_opcode_F_APPLY (arg1=137428224)
    at /usr/tmp/pike/src/interpret_functions.h:1936
#14 0x0835c962 in ?? ()
#15 0x08073e9c in mega_apply (type=APPLY_STACK, args=1, arg1=0x0, arg2=0x0)
    at /usr/tmp/pike/src/interpret.c:1983
#16 0x08073fc0 in f_call_function (args=1)
    at /usr/tmp/pike/src/interpret.c:2054
#17 0x080fef2b in new_thread_func (data=0xbfbfdb04)
    at /usr/tmp/pike/src/threads.c:864
#18 0x2821e5c9 in thread_start (curthread=0x8535200,
    start_routine=0x80fed00 <new_thread_func>, arg=0xbfbfdb04)
    at /usr/src/lib/libpthread/thread/thr_create.c:353
#19 0x282cb0b3 in _ctx_start () at {standard input}:15
#20 0x00001000 in ?? ()
(gdb)


-- 
	Dan Nelson
	dnelson at allantgroup.com


More information about the freebsd-threads mailing list