[PATCH] Drop nclone_detached and related flags

Wang Chao wang.chao at cn.fujitsu.com
Fri Aug 27 09:43:16 UTC 2010


Remove nclone_detached since CLONE_DETACHED flag was no-op for
a very long time in kernel.

* defs.h: Remove nclone_detached and flag TCB_CLONE_DETACHED.
* process.c (internal_fork, internal_wait): Remove code dealing
  with CLONE_DETACHED flag and nclone_detached.
* strace.c (startup_attach, alloc_tcb, droptcb, handle_group_exit):
  Likewise.

Signed-off-by: Wang Chao <wang.chao at cn.fujitsu.com>
---
 defs.h    |    2 --
 process.c |   10 ++--------
 strace.c  |   14 +++-----------
 3 files changed, 5 insertions(+), 21 deletions(-)

diff --git a/defs.h b/defs.h
index 419b12e..4b9c29e 100644
--- a/defs.h
+++ b/defs.h
@@ -336,7 +336,6 @@ struct tcb {
 	int nzombies;		/* # of formerly traced children now dead */
 #ifdef LINUX
 	int nclone_threads;	/* # of nchildren with CLONE_THREAD */
-	int nclone_detached;	/* # of nchildren with CLONE_DETACHED */
 	int nclone_waiting;	/* clone threads in wait4 (TCB_SUSPENDED) */
 #endif
 				/* (1st arg of wait4()) */
@@ -382,7 +381,6 @@ struct tcb {
   || defined(ARM) || defined(MIPS) || defined(BFIN) || defined(TILE)
 #  define TCB_WAITEXECVE 02000	/* ignore SIGTRAP after exceve */
 # endif
-# define TCB_CLONE_DETACHED 04000 /* CLONE_DETACHED set in creating syscall */
 # define TCB_CLONE_THREAD  010000 /* CLONE_THREAD set in creating syscall */
 # define TCB_GROUP_EXITING 020000 /* TCB_EXITING was exit_group, not _exit */
 # include <sys/syscall.h>
diff --git a/process.c b/process.c
index 59d7ba0..f7af196 100644
--- a/process.c
+++ b/process.c
@@ -555,7 +555,6 @@ struct tcb *tcp;
 #define CLONE_SETTLS	0x00080000	/* create a new TLS for the child */
 #define CLONE_PARENT_SETTID	0x00100000	/* set the TID in the parent */
 #define CLONE_CHILD_CLEARTID	0x00200000	/* clear the TID in the child */
-#define CLONE_DETACHED		0x00400000	/* parent wants no child-exit signal */
 #define CLONE_UNTRACED		0x00800000	/* set if the tracing process can't force CLONE_PTRACE on this clone */
 #define CLONE_CHILD_SETTID	0x01000000	/* set the TID in the child */
 
@@ -574,7 +573,6 @@ static const struct xlat clone_flags[] = {
     { CLONE_SETTLS,	"CLONE_SETTLS" },
     { CLONE_PARENT_SETTID,"CLONE_PARENT_SETTID" },
     { CLONE_CHILD_CLEARTID,"CLONE_CHILD_CLEARTID" },
-    { CLONE_DETACHED,	"CLONE_DETACHED" },
     { CLONE_UNTRACED,	"CLONE_UNTRACED" },
     { CLONE_CHILD_SETTID,"CLONE_CHILD_SETTID" },
     { 0,		NULL		},
@@ -911,10 +909,6 @@ Process %u resumed (parent %d ready)\n",
 				tcpchild->flags |= TCB_CLONE_THREAD;
 				++tcp->nclone_threads;
 			}
-			if (call_flags & CLONE_DETACHED) {
-				tcpchild->flags |= TCB_CLONE_DETACHED;
-				++tcp->nclone_detached;
-			}
 			if ((call_flags & CLONE_PARENT) &&
 			    !(call_flags & CLONE_THREAD)) {
 				--tcp->nchildren;
@@ -1932,9 +1926,9 @@ int flagarg;
 	if (tcp->flags & TCB_CLONE_THREAD)
 		/* The children we wait for are our parent's children.  */
 		got_kids = (tcp->parent->nchildren
-			    > (tcp->parent->nclone_detached + tcp->parent->nclone_threads));
+			    > tcp->parent->nclone_threads);
 	else
-		got_kids = (tcp->nchildren > (tcp->nclone_detached + tcp->nclone_threads));
+		got_kids = (tcp->nchildren > tcp->nclone_threads);
 #else
 	got_kids = tcp->nchildren > 0;
 #endif
diff --git a/strace.c b/strace.c
index 3505948..c1d6539 100644
--- a/strace.c
+++ b/strace.c
@@ -443,10 +443,9 @@ startup_attach(void)
 						++nerr;
 					else if (tid != tcbtab[tcbi]->pid) {
 						tcp = alloctcb(tid);
-						tcp->flags |= TCB_ATTACHED|TCB_CLONE_THREAD|TCB_CLONE_DETACHED|TCB_FOLLOWFORK;
+						tcp->flags |= TCB_ATTACHED|TCB_CLONE_THREAD|TCB_FOLLOWFORK;
 						tcbtab[tcbi]->nchildren++;
 						tcbtab[tcbi]->nclone_threads++;
-						tcbtab[tcbi]->nclone_detached++;
 						tcp->parent = tcbtab[tcbi];
 					}
 					if (interactive) {
@@ -1028,7 +1027,7 @@ alloc_tcb(int pid, int command_options_parsed)
 			tcp->nchildren = 0;
 			tcp->nzombies = 0;
 #ifdef TCB_CLONE_THREAD
-			tcp->nclone_threads = tcp->nclone_detached = 0;
+			tcp->nclone_threads = 0;
 			tcp->nclone_waiting = 0;
 #endif
 			tcp->flags = TCB_INUSE | TCB_STARTUP;
@@ -1396,15 +1395,10 @@ struct tcb *tcp;
 	if (tcp->parent != NULL) {
 		tcp->parent->nchildren--;
 #ifdef TCB_CLONE_THREAD
-		if (tcp->flags & TCB_CLONE_DETACHED)
-			tcp->parent->nclone_detached--;
 		if (tcp->flags & TCB_CLONE_THREAD)
 			tcp->parent->nclone_threads--;
 #endif
-#ifdef TCB_CLONE_DETACHED
-		if (!(tcp->flags & TCB_CLONE_DETACHED))
-#endif
-			tcp->parent->nzombies++;
+		tcp->parent->nzombies++;
 #ifdef LINUX
 		/* Update `tcp->parent->parent->nchildren' and the other fields
 		   like NCLONE_DETACHED, only for zombie group leader that has
@@ -2232,8 +2226,6 @@ handle_group_exit(struct tcb *tcp, int sig)
 
 	if (tcp->flags & TCB_CLONE_THREAD)
 		leader = tcp->parent;
-	else if (tcp->nclone_detached > 0)
-		leader = tcp;
 
 	if (sig < 0) {
 		if (leader != NULL && leader != tcp
-- 
1.6.5.2





More information about the Strace-devel mailing list