]> granicus.if.org Git - strace/commitdiff
Remove "better attach to SIGSTOP", it is not correct...
authorDenys Vlasenko <dvlasenk@redhat.com>
Tue, 17 Mar 2009 14:46:54 +0000 (14:46 +0000)
committerDenys Vlasenko <dvlasenk@redhat.com>
Tue, 17 Mar 2009 14:46:54 +0000 (14:46 +0000)
(^C fix remains).

ChangeLog
strace.c

index f5ff8a2f4159afcd2305d58af48a4bc760b86e9d..566b1347446e531197a49cf804e610b83e70f31a 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,8 +1,6 @@
 2009-03-17  Denys Vlasenko  <dvlasenk@redhat.com>
 
-       * strace.c (startup_attach): Take care to correctly attach
-       to stopped processes by resending SIGSTOP.
-       (collect_stopped_tcbs): Check for ^C here, not in trace().
+       * strace.c (collect_stopped_tcbs): Check for ^C here, not in trace().
        (trace): Remove check for ^C.
 
 2009-03-10  Denys Vlasenko  <dvlasenk@redhat.com>
index 864e7f40009f5aa5061700201bdc5767fcb3e7fc..e275bfd12acb7fa90bd04d395762b4f5a9e59d81 100644 (file)
--- a/strace.c
+++ b/strace.c
@@ -437,15 +437,9 @@ startup_attach(void)
                                        if (tid <= 0)
                                                continue;
                                        ++ntid;
-                                       if (ptrace(PTRACE_ATTACH, tid, (char *) 1, 0) < 0) {
+                                       if (ptrace(PTRACE_ATTACH, tid, (char *) 1, 0) < 0)
                                                ++nerr;
-                                               continue;
-                                       }
-#if defined LINUX && defined __NR_tkill
-                                       syscall(__NR_tkill, tid, SIGSTOP);
-                                       ptrace(PTRACE_CONT, tid, 0, 0);
-#endif
-                                       if (tid != tcbtab[tcbi]->pid) {
+                                       else if (tid != tcbtab[tcbi]->pid) {
                                                tcp = alloctcb(tid);
                                                tcp->flags |= TCB_ATTACHED|TCB_CLONE_THREAD|TCB_CLONE_DETACHED;
                                                tcbtab[tcbi]->nchildren++;
@@ -453,14 +447,14 @@ startup_attach(void)
                                                tcbtab[tcbi]->nclone_detached++;
                                                tcp->parent = tcbtab[tcbi];
                                        }
+                                       if (interactive) {
+                                               sigprocmask(SIG_SETMASK, &empty_set, NULL);
+                                               if (interrupted)
+                                                       return;
+                                               sigprocmask(SIG_BLOCK, &blocked_set, NULL);
+                                       }
                                }
                                closedir(dir);
-                               if (interactive) {
-                                       sigprocmask(SIG_SETMASK, &empty_set, NULL);
-                                       if (interrupted)
-                                               return;
-                                       sigprocmask(SIG_BLOCK, &blocked_set, NULL);
-                               }
                                ntid -= nerr;
                                if (ntid == 0) {
                                        perror("attach: ptrace(PTRACE_ATTACH, ...)");
@@ -482,14 +476,6 @@ startup_attach(void)
                        droptcb(tcp);
                        continue;
                }
-#if defined LINUX && defined __NR_tkill
-               /* If process was SIGSTOPed, and waited for,
-                  even before attach, we will never get SIGSTOP
-                  notification. This works around it.
-                  Borrowed from GDB, thanks Jan! */
-               syscall(__NR_tkill, tcp->pid, SIGSTOP);
-               ptrace(PTRACE_CONT, tcp->pid, 0, 0);
-#endif
                /* INTERRUPTED is going to be checked at the top of TRACE.  */
 
                if (daemonized_tracer) {