Daniel Jacobowitz wrote: > On Thu, Mar 11, 2004 at 01:08:40AM +0000, Michael Snyder wrote: > >>Hey Daniel, >> >>Got a question concerning the code in >>linux-nat.c::linux_handle_extended_wait. >> >>You've got a PTRACE_EVENT_FORK event, and now you're going to call >>waitpid. You pull a pid out of a list of stopped pids, and wait for >>it using waitpid. In your comment, you explain that you don't have to >>worry about the pid being a clone, because you didn't ask for pids in >>the event mask. >> >>But how is this affected by threads, especially NPTL threads? >>I've got a fairly simple test-case (modified from pthreads.c, >>I'll attach it), in which a child thread calls fork -- but gdb >>apparently tries to wait on the main thread (or perhaps the most >>recent event thread). Since that's not the thread that called >>fork, waitpid returns -1 with "no child". Gdb reports: >> waiting for new child: No child processes. >> >>FWIW, I've tried this on both a single-processor and an SMP machine. > > > No attachment? Argh. Inevitable, isn't it? See currently attached. > Also, what glibc/nptl version are you using. Well, it's RHEL3, so I believe it's glibc 2.3 and nptl (not sure what version of nptl). > It's entirely possible that I didn't handle some threaded case. But we > save the PID that we plan to wait on, which should be the child thread, > so I don't see how what you're describing can happn. It's repeatable, on at least 3 machines. Let me know (now that I've actually provided the test case) if you can't reproduce it.