From a2de9dacec47b7902b19f37edcc564faff346816 Mon Sep 17 00:00:00 2001 From: Denys Vlasenko Date: Fri, 21 Jun 2013 15:50:41 +0200 Subject: [PATCH] Eat pending SIGSTOP _before_ PTRACE_DETACH in detach() * strace.c (detach): If TCB_IGNORE_ONE_SIGSTOP is set, di not PTRACE_DETACH - wait for SIGSTOP first. Signed-off-by: Denys Vlasenko --- strace.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/strace.c b/strace.c index 89e89bc3..55089bf3 100644 --- a/strace.c +++ b/strace.c @@ -758,6 +758,8 @@ detach(struct tcb *tcp) * would be left stopped (process state T). */ sigstop_expected = (tcp->flags & TCB_IGNORE_ONE_SIGSTOP); + if (sigstop_expected) + goto wait_loop; error = ptrace(PTRACE_DETACH, tcp->pid, 0, 0); if (error == 0) { /* On a clear day, you can see forever. */ @@ -802,6 +804,7 @@ detach(struct tcb *tcp) } if (sigstop_expected || interrupt_done) { + wait_loop: for (;;) { int sig; if (waitpid(tcp->pid, &status, __WALL) < 0) { -- 2.50.1