tst-too-many-cleanups never completes

Daniel Jacobowitz drow at false.org
Mon Apr 16 14:47:26 PDT 2007


I ran the tst-too-many-cleanups test on a local copy of uClibc - not
pristine trunk, but as far as I can see the situation on trunk is the
same.  I can verify if you think it's different.  I'm using
linuxthreads.old.

Two problems:

- It calls sleep expecting a cancellation point at nanosleep.  But
libc.so's sleep.c has "libc_hidden_proto(nanosleep)" which means it
always calls the libc.so version, never the wrapped version in
libpthread.so that's a cancellation point.  Delete that line from
sleep.c and usleep.c and now sleep/usleep start acting like
cancellation points.

- It never terminates.  This is the bit I've got a question about - I
can't see how it ever would terminate.  Main returns, so we end up in
exit.  The manager thread sends a cancellation signal to every
thread.  But because we're already in a cancellation handler, SIGRT_1
is blocked.  So we'll spin forever in exit.  This is one of the
reasons you're not supposed to have infinite loops in your
cancellation handlers.

So... Mike, you added this - how did it terminate? :-)

-- 
Daniel Jacobowitz
CodeSourcery


More information about the uClibc mailing list