Messages in this thread | | | From | Denys Vlasenko <> | Subject | Re: [PATCHSET ptrace] ptrace: implement PTRACE_SEIZE/INTERRUPT and group stop notification, take#4 | Date | Fri, 3 Jun 2011 13:58:20 +0200 |
| |
On Friday 03 June 2011 13:37, Denys Vlasenko wrote: > On Friday 03 June 2011 03:34, Tejun Heo wrote: > > > This should alleviate Linus' concerns that we are suffering from unnecessary > > > featuritis - that we invent API which is significantly different > > > from existing one, and as such users will not use it. > > > > > > Existing API doesn't use GETSIGINFO data per se to distinguish group-stop from > > > signal-delivery-stop, it uses the fact that GETSIGINFO fails on group-stop. > > > (Well, arguably it's not a "designed" API, more like "accidentally created API", > > > but nevertheless it exists right now). Oleg's proposal means that the new way > > > may be makde to work very similarly. > > > > Okay, you want to preserve %NULL SIGINFO on all STOP traps. Dropping > > si_pt_flags and using exit_code makes sense but I think we'll be > > better off enabling GETSIGINFO. The affected part of code has to be > > changed anyway > > Well, not exactly. The affected part of code in strace *has been changed > already*. Latest version of strace finally does show "SIGSTOP delivered" > and "group-stop happened" events differently. > > Now strace, ideally, can have a minimal change > > - ptrace(PTRACE_LISTEN, pid, 0, sig); > + if (this_is_group_stop) > + ptrace(PTRACE_LISTEN, pid, 0, 0); > + else > + ptrace(PTRACE_SYSCALL, pid, 0, sig); > > and boom, group-stops are handled correctly!
I meant
- ptrace(PTRACE_SYSCALL, pid, 0, sig); + if (this_is_group_stop) + ptrace(PTRACE_LISTEN, pid, 0, 0); + else + ptrace(PTRACE_SYSCALL, pid, 0, sig);
-- vda
| |