On Sat, 2011-06-25 at 11:34 +0200, Denys Vlasenko wrote: > This patch is on top of "do not detach when we think tracee is going to die". > > Since we no longer suspend waitpid'ing tracees, we have only one case when > we suspend tracee: when we pick up a new tracee created by clone/fork/vfork. > > Background: on some other OSes, attach to child is done this way: > get fork's result (pid), loop ptrace(PTRACE_ATTACH) until you hook up > new process/thread. This is ugly and not safe, but what matters for us > is that it doesn't require suspending. > > Only on Linux, it does. On Linux, we use two methods of catching > new tracee: adding CLONE_THREAD bit to syscall (if needed, we change > [v]fork into clone before that), or using ptrace options. > In both cases, it may be so that new tracee appears before one which > created it returns from syscall. In this case, current code > suspends new tracee until its creator returns. Only then > strace can determine who is its parent (it needs child's pid for this). > This is inherently racy. For example, what if SIGKILL kills > creator after it succeeded creating child, but before it returns? > Looks like we will have child suspended forever. > > But after "do not detach when we think tracee is going to die" patch, > we DO NOT NEED parent<->child link for anything. Therefore > we do not need suspending too. Bingo! > > This patch removes suspending code. Now new tracees will be continued > right away. Next patch will remove tcp->parent member.
Applied this patch to git. -- vda ------------------------------------------------------------------------------ Get a FREE DOWNLOAD! and learn more about uberSVN rich system, user administration capabilities and model configuration. Take the hassle out of deploying and managing Subversion and the tools developers use with it. http://p.sf.net/sfu/wandisco-d2d-2 _______________________________________________ Strace-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/strace-devel
