This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
On Fri, 2005-09-16 at 14:56 +0300, Balint Cristian wrote:
> On Friday 16 September 2005 13:45, Martin Schlemmer wrote:
>
>
> Anyway 2.3.90 aka pre 2.4.5 glibc will drop linuxthread, i think there are null interests for glibc
> to fix this issue, nptl will remain only in the future.
>
I know, and I did mention this, but I also did mention that some of the
ev6 based boxes currently still do not work properly with 2.6 kernel's.
> > Hi,
> > There already is a bug about this issue:
> > http://sources.redhat.com/bugzilla/show_bug.cgi?id=1297
> > Basically with 2.4 or 2.6 kernels, glibc-2.3.[45] and linuxthreads,
> > there are issues with cleaning up the threads, and you get a defunct
> > process.
> > ----- test case -----
> > #include <pthread.h>
> > #include <unistd.h>
> > void myThread(void *foo) {
> > pthread_exit(foo);
> > }
> > int main()
> > {
> > pthread_t tt;
> > pthread_attr_t ta;
> >
> > pthread_attr_init(&ta);
> > pthread_attr_setdetachstate(&ta, PTHREAD_CREATE_DETACHED);
> >
> > pthread_create(&tt, &ta, (void* (*) (void*))myThread, (void*)NULL);
> >
> > sleep(600);
> >
> > return 0;
> > }
> > -----
> >
> > Above code does the following:
> >
> > -----
> > root 4541 0.0 0.1 4448 648 pts/0 S+ 01:32 0:00 /root/pthread-test
> > root 4542 0.0 0.1 4448 648 pts/0 S+ 01:32 0:00 /root/pthread-test
> > root 4543 0.0 0.0 0 0 pts/0 Z+ 01:32 0:00 [pthread-test] <defunct>
> > -----
> >
> > And of course, pid 4543 is not debug-able. Adding a sleep and trying to
> > debug the thread that goes defunct do not show this behaviour:
> >
> > -----
> > Attaching to process 4525
> > Using host libthread_db library "/lib/libthread_db.so.1".
> > Reading symbols from /root/pthread-test...done.
> > Reading symbols from /lib/libpthread.so.0...done.
> > [Thread debugging using libthread_db enabled]
> > [New Thread 16384 (LWP 4523)]
> > [New Thread 32769 (LWP 4524)]
> > [New Thread 16386 (LWP 4525)]
> > Loaded symbols for /lib/libpthread.so.0
> > Reading symbols from /lib/libc.so.6.1...done.
> > Loaded symbols for /lib/libc.so.6.1
> > Reading symbols from /lib/ld-linux.so.2...done.
> > Loaded symbols for /lib/ld-linux.so.2
> > 0x00000200001734f4 in nanosleep () from /lib/libc.so.6.1
> > (gdb) s
> > Single stepping until exit from function nanosleep,
> > which has no line number information.
> > [Switching to Thread 16386 (LWP 4525)]
> > pthread_handle_sigcancel (sig=524288) at descr.h:248
> > 248 return THREAD_SELF;
> > (gdb)
> > 535 if (self == __manager_thread)
> > (gdb)
> > 1069 {
> > (gdb)
> > 248 return THREAD_SELF;
> > (gdb)
> > 1069 {
> > (gdb)
> > 248 return THREAD_SELF;
> > (gdb)
> > 1069 {
> > (gdb)
> > 535 if (self == __manager_thread)
> > (gdb)
> > 1073 if (self == manager_thread)
> > (gdb)
> > 1078 if (__builtin_expect (__pthread_exit_requested, 0)) {
> > (gdb)
> > 1081 if (self == __pthread_main_thread) {
> > (gdb)
> > 1088 _exit(__pthread_exit_code);
> > (gdb)
> > *__GI__exit (status=0) at _exit.c:35
> > 35 INLINE_SYSCALL (exit, 1, status);
> > (gdb)
> >
> > Program exited normally.
> > (gdb)
> > -----
> >
> > Debugging the manager thread seems to just loop inside
> > __pthread_manager(). This issue is with both gcc-3.3.x and gcc-3.4.4, a
> > few versions of binutils, and glibc-2.3.[45].
> >
> > NPTL works fine (and I know is the preferred threading implementation),
> > but currently not entirely a solution, as some of the ev6 based boxes
> > have issues with 2.6 kernels.
> >
> > Any ideas on how to proceed in debugging this will be appreciated.
> >
> >
> > Regards,
> >
>
--
Martin Schlemmer
Attachment:
signature.asc
Description: This is a digitally signed message part
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |