[PATCH] delete fork_tcb()

Denys Vlasenko dvlasenk at redhat.com
Tue Jun 21 18:26:07 UTC 2011


Hi,

Sometime ago expand_tcbtab/alloc_tcb were modified
so that they never return failure (they will abort instead).

This opens up a possibility for further simplifications.

This patch gets rid of fork_tcb() function. It used to do
what the comment above it says, but now it doesn't do much:
it only sets tcp->flags |= TCB_FOLLOWFORK and maybe calls
expand_tcbtab(). The second operation is not necessary, since
alloc_tcp will do it itself when needed.

This patch deletes fork_tcb, open-coding tcp->flags |= TCB_FOLLOWFORK
where it was formerly called. It also makes nprocs and tcbtabsize
variables static. (While at it, I nuked redundant extern char **environ
declaration: strace.c had *two* of them...)

Please review.

-- 
vda



diff -d -urpN strace.7/defs.h strace.8/defs.h
--- strace.7/defs.h	2011-06-21 16:03:18.011238717 +0200
+++ strace.8/defs.h	2011-06-21 20:10:16.722982152 +0200
@@ -510,7 +510,6 @@ extern unsigned int ptrace_setoptions;
 extern int dtime, xflag, qflag;
 extern cflag_t cflag;
 extern int acolumn;
-extern unsigned int nprocs, tcbtabsize;
 extern int max_strlen;
 extern struct tcb *tcp_last;
 
diff -d -urpN strace.7/process.c strace.8/process.c
--- strace.7/process.c	2011-06-21 16:00:55.384401476 +0200
+++ strace.8/process.c	2011-06-21 20:08:39.681173083 +0200
@@ -448,18 +448,6 @@ internal_exit(struct tcb *tcp)
 	return 0;
 }
 
-/* TCP is creating a child we want to follow.
-   If there will be space in tcbtab for it, set TCB_FOLLOWFORK and return 0.
-   If not, clear TCB_FOLLOWFORK, print an error, and return 1.  */
-static void
-fork_tcb(struct tcb *tcp)
-{
-	if (nprocs == tcbtabsize)
-		expand_tcbtab();
-
-	tcp->flags |= TCB_FOLLOWFORK;
-}
-
 #ifdef USE_PROCFS
 
 int
@@ -507,7 +495,7 @@ internal_fork(struct tcb *tcp)
 			return 0;
 		if (!followfork)
 			return 0;
-		fork_tcb(tcp);
+		tcp->flags |= TCB_FOLLOWFORK;
 		if (syserror(tcp))
 			return 0;
 		tcpchild = alloctcb(tcp->u_rval);
@@ -808,7 +796,7 @@ handle_new_child(struct tcb *tcp, int pi
 	else
 #endif /* CLONE_PTRACE */
 	{
-		fork_tcb(tcp);
+		tcp->flags |= TCB_FOLLOWFORK;
 		tcpchild = alloctcb(pid);
 	}
 
@@ -916,7 +904,7 @@ internal_fork(struct tcb *tcp)
 		if ((sysent[tcp->scno].sys_func == sys_clone) &&
 		    (tcp->u_arg[ARG_FLAGS] & CLONE_UNTRACED))
 			return 0;
-		fork_tcb(tcp);
+		tcp->flags |= TCB_FOLLOWFORK;
 		if (setbpt(tcp) < 0)
 			return 0;
 	} else {
@@ -960,7 +948,7 @@ internal_fork(struct tcb *tcp)
 	if (entering(tcp)) {
 		if (!followfork || dont_follow)
 			return 0;
-		fork_tcb(tcp);
+		tcp->flags |= TCB_FOLLOWFORK;
 		if (setbpt(tcp) < 0)
 			return 0;
 	}
@@ -976,7 +964,7 @@ internal_fork(struct tcb *tcp)
 			return 0;
 
 		pid = tcp->u_rval;
-		fork_tcb(tcp);
+		tcp->flags |= TCB_FOLLOWFORK;
 		tcpchild = alloctcb(pid);
 #ifdef SUNOS4
 #ifdef oldway
diff -d -urpN strace.7/strace.c strace.8/strace.c
--- strace.7/strace.c	2011-06-21 20:11:27.220751557 +0200
+++ strace.8/strace.c	2011-06-21 20:11:31.876733125 +0200
@@ -127,9 +127,8 @@ static char *outfname = NULL;
 FILE *outf;
 static int curcol;
 struct tcb **tcbtab;
-unsigned int nprocs, tcbtabsize;
+static unsigned int nprocs, tcbtabsize;
 const char *progname;
-extern char **environ;
 
 static int detach(struct tcb *tcp, int sig);
 static int trace(void);





More information about the Strace-devel mailing list