[Glibc-bsd-commits] r2744 - in trunk: glibc-ports/kfreebsd kfreebsd-7/debian/patches kfreebsd-8/debian/patches

Petr Salinger ps-guest at alioth.debian.org
Thu Aug 27 18:53:26 UTC 2009


Author: ps-guest
Date: 2009-08-27 18:53:26 +0000 (Thu, 27 Aug 2009)
New Revision: 2744

Modified:
   trunk/glibc-ports/kfreebsd/clone.c
   trunk/kfreebsd-7/debian/patches/007_clone_signals.diff
   trunk/kfreebsd-8/debian/patches/007_clone_signals.diff
Log:
play with clone signal handling 
  - be backward compatible
  - start thread manager without any exit notification for parent



Modified: trunk/glibc-ports/kfreebsd/clone.c
===================================================================
--- trunk/glibc-ports/kfreebsd/clone.c	2009-08-26 19:15:43 UTC (rev 2743)
+++ trunk/glibc-ports/kfreebsd/clone.c	2009-08-27 18:53:26 UTC (rev 2744)
@@ -62,14 +62,17 @@
       return -1;
     }
 
-  if ((flags & CSIGNAL) != 0 && (flags & CSIGNAL) != SIGCHLD)
+  if ((flags & CSIGNAL) != SIGCHLD)
     {
       if ((flags & CSIGNAL) & ~RFTHPNMASK)
 	{
 	  __set_errno (EINVAL);
 	  return -1;
 	}
-      rfork_flags |= (RFLINUXTHPN | ((flags & CSIGNAL) <<  RFTHPNSHIFT));
+      if ((flags & CSIGNAL) == 0)
+        rfork_flags |= (RFLINUXTHPN | ((SIGCHLD) <<  RFTHPNSHIFT));
+      else
+        rfork_flags |= (RFLINUXTHPN | ((flags & CSIGNAL) <<  RFTHPNSHIFT));
     }
 
   if (flags & CLONE_VM)

Modified: trunk/kfreebsd-7/debian/patches/007_clone_signals.diff
===================================================================
--- trunk/kfreebsd-7/debian/patches/007_clone_signals.diff	2009-08-26 19:15:43 UTC (rev 2743)
+++ trunk/kfreebsd-7/debian/patches/007_clone_signals.diff	2009-08-27 18:53:26 UTC (rev 2744)
@@ -2,7 +2,7 @@
 ===================================================================
 --- src.orig/sys/kern/kern_fork.c
 +++ src/sys/kern/kern_fork.c
-@@ -529,7 +529,11 @@
+@@ -529,7 +529,13 @@
  		p2->p_sigacts = newsigacts;
  	}
  	if (flags & RFLINUXTHPN) 
@@ -10,7 +10,9 @@
 +	{
 +		int sig;
 +		sig = RFTHPNSIGNUM(flags);
-+	        p2->p_sigparent = sig ? sig : SIGUSR1;
++	        if (sig == 0) sig = SIGUSR1;
++	        if (sig == SIGCHLD) sig = 0;
++	        p2->p_sigparent = sig;
 +	}
  	else
  	        p2->p_sigparent = SIGCHLD;

Modified: trunk/kfreebsd-8/debian/patches/007_clone_signals.diff
===================================================================
--- trunk/kfreebsd-8/debian/patches/007_clone_signals.diff	2009-08-26 19:15:43 UTC (rev 2743)
+++ trunk/kfreebsd-8/debian/patches/007_clone_signals.diff	2009-08-27 18:53:26 UTC (rev 2744)
@@ -1,6 +1,6 @@
 --- src.orig/sys/kern/kern_fork.c
 +++ src/sys/kern/kern_fork.c
-@@ -561,7 +561,11 @@
+@@ -561,7 +561,13 @@
  		p2->p_sigacts = newsigacts;
  	}
  	if (flags & RFLINUXTHPN) 
@@ -8,7 +8,9 @@
 +	{
 +		int sig;
 +		sig = RFTHPNSIGNUM(flags);
-+	        p2->p_sigparent = sig ? sig : SIGUSR1;
++	        if (sig == 0) sig = SIGUSR1;
++	        if (sig == SIGCHLD) sig = 0;
++	        p2->p_sigparent = sig;
 +	}
  	else
  	        p2->p_sigparent = SIGCHLD;




More information about the Glibc-bsd-commits mailing list