On Wed, Jun 19, 2013 at 12:36:20AM +0400, Dmitry V. Levin wrote:
> On Tue, Jun 18, 2013 at 06:18:14PM +0200, Denys Vlasenko wrote:
> > * strace.c (detach) [USE_SEIZE]: If PTRACE_SEIZE API is in use, stop
> > the tracee using PTRACE_INTERRUPT instead of sending it a SIGSTOP.
> > In a subsequent waitpid loop, wait for either SIGSTOP or SIGTRAP.
[...]
> > @@ -810,7 +819,9 @@ detach(struct tcb *tcp)
> > /* Au revoir, mon ami. */
> > break;
> > }
> > - if (WSTOPSIG(status) == SIGSTOP) {
> > + if (WSTOPSIG(status) == SIGSTOP
> > + || WSTOPSIG(status) == SIGTRAP /* may be generated by
> > PTRACE_INTERRUPT stop */
> > + ) {
>
> In case of PTRACE_INTERRUPT this WSTOPSIG(status) is not plain SIGTRAP
> but (SIGTRAP | 0x80), which also may happen in other !use_seize cases.
> That is, the right check seems to be
> WSTOPSIG(status) == SIGSTOP ||
> (use_seize && WSTOPSIG(status) == (SIGTRAP | 0x80))
> It also passes both tests/detach-sleeping and tests/detach-stopped.
It still hangs while detaching from a running process
(just added tests/detach-running fails). What seems to work so far is
WSTOPSIG(status) == SIGSTOP ||
(use_seize && (WSTOPSIG(status) & 0x7f) == SIGTRAP)
--
ldv
pgps04DQm8jDJ.pgp
Description: PGP signature
------------------------------------------------------------------------------ This SF.net email is sponsored by Windows: Build for Windows Store. http://p.sf.net/sfu/windows-dev2dev
_______________________________________________ Strace-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/strace-devel
