On 10/06, Jan Kratochvil wrote: > > Yes, I agree with the current general behavior of ptrace there is missing: > if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGPIPE) > > [...snip...] > > --- attach-into-signal.c 31 Jan 2009 21:11:40 -0000 1.5 > +++ attach-into-signal.c 6 Oct 2009 14:27:08 -0000 > @@ -224,6 +224,18 @@ static void reproduce (void) > child = 0; > return; > } > + /* SIGPIPE was still pending and it has not been yet delivered. */ > + if (WIFSTOPPED (status) && WSTOPSIG (status) == SIGPIPE) > + { > + /* Deliver it and get the queued SIGSTOP. */ > + errno = 0; > + ptrace (PTRACE_CONT, child, (void *) 1, (void *) SIGPIPE); > + assert_perror (errno); > + > + errno = 0; > + pid = waitpid (child, &status, 0); > + assert (pid == child); > + } > assert (WIFSTOPPED (status)); > assert (WSTOPSIG (status) == SIGSTOP); > /* let tracee run. it must be killed very soon by SIGPIPE */
Jan, please revert this change. Roland thinks we should keep this behaviour, this means attach-into-signal.c checks (in particular) exactly what we want: the new attach must not see SIGPIPE. With the recent patches utrace-ptrace passes this test-case too. Oleg.