On Fri, 2011-09-02 at 16:13 +0200, Denys Vlasenko wrote:
> Patch 1: Do not set TCB_STARTUP on tcb until we performed attach.

diff -d -urpN strace.1/process.c strace.2/process.c
--- strace.1/process.c  2011-09-01 10:00:21.000000000 +0200
+++ strace.2/process.c  2011-09-01 18:30:57.848409673 +0200
@@ -485,6 +485,7 @@ internal_fork(struct tcb *tcp)
                if (syserror(tcp))
                        return 0;
                tcpchild = alloctcb(tcp->u_rval);
+               tcpchild->flags |= TCB_STARTUP;
                if (proc_open(tcpchild, 2) < 0)
                        droptcb(tcpchild);
        }
@@ -858,7 +859,7 @@ internal_fork(struct tcb *tcp)
                }
 #endif /* !oldway */
 #endif /* SUNOS4 */
-               tcpchild->flags |= TCB_ATTACHED;
+               tcpchild->flags |= TCB_ATTACHED | TCB_STARTUP;
                /* Child has BPT too, must be removed on first occasion */
                if (bpt) {
                        tcpchild->flags |= TCB_BPTSET;
diff -d -urpN strace.1/strace.c strace.2/strace.c
--- strace.1/strace.c   2011-09-02 16:00:38.417925623 +0200
+++ strace.2/strace.c   2011-09-02 16:08:29.976955668 +0200
@@ -489,7 +489,7 @@ startup_attach(void)
                                                        fprintf(stderr, "attach 
to pid %d succeeded\n", tid);
                                                if (tid != tcp->pid) {
                                                        struct tcb *new_tcp = 
alloctcb(tid);
-                                                       new_tcp->flags |= 
TCB_ATTACHED|TCB_ATTACH_DONE;
+                                                       new_tcp->flags |= 
TCB_ATTACHED|TCB_ATTACH_DONE|TCB_STARTUP;
                                                }
                                        }
                                        if (interactive) {
@@ -521,6 +521,7 @@ startup_attach(void)
                        droptcb(tcp);
                        continue;
                }
+               tcp->flags |= TCB_STARTUP;
                if (debug)
                        fprintf(stderr, "attach to pid %d (main) succeeded\n", 
tcp->pid);
 
@@ -714,6 +715,7 @@ startup_child(char **argv)
 
        if (!daemonized_tracer) {
                tcp = alloctcb(pid);
+               tcp->flags |= TCB_STARTUP;
        }
        else {
                /* With -D, *we* are child here, IOW: different pid. Fetch it: 
*/
@@ -1270,7 +1272,7 @@ alloc_tcb(int pid, int command_options_p
                if ((tcp->flags & TCB_INUSE) == 0) {
                        memset(tcp, 0, sizeof(*tcp));
                        tcp->pid = pid;
-                       tcp->flags = TCB_INUSE | TCB_STARTUP;
+                       tcp->flags = TCB_INUSE;
                        tcp->outf = outf; /* Initialise to current out file */
 #ifdef USE_PROCFS
                        tcp->pfd = -1;
@@ -2417,7 +2419,7 @@ trace()
                                   child so that we know how to do clearbpt
                                   in the child.  */
                                tcp = alloctcb(pid);
-                               tcp->flags |= TCB_ATTACHED;
+                               tcp->flags |= TCB_ATTACHED | TCB_STARTUP;
                                if (!qflag)
                                        fprintf(stderr, "Process %d attached\n",
                                                pid);



------------------------------------------------------------------------------
Special Offer -- Download ArcSight Logger for FREE!
Finally, a world-class log management solution at an even better 
price-free! And you'll get a free "Love Thy Logs" t-shirt when you
download Logger. Secure your free ArcSight Logger TODAY!
http://p.sf.net/sfu/arcsisghtdev2dev
_______________________________________________
Strace-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to