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 _______________________________________________ uClibc mailing list [email protected] http://busybox.net/cgi-bin/mailman/listinfo/uclibc
