Author: faridz
Date: Wed Oct 31 08:19:47 2007
New Revision: 590712

URL: http://svn.apache.org/viewvc?rev=590712&view=rev
Log:
2007-10-31 Travis Vitek <[EMAIL PROTECTED]>

        Merged r590711 from branches/4.2.x with a fix for STDCXX-625
        * process.cpp (sig_handler): Don't re-register for signal from
        within signal handler to avoid stack overflow on HP-UX and AIX.
        (rw_waitpid): Set and restore signal handler inside loop so we
        can avoid using the signal handler to do it.

Modified:
    incubator/stdcxx/trunk/tests/src/process.cpp

Modified: incubator/stdcxx/trunk/tests/src/process.cpp
URL: 
http://svn.apache.org/viewvc/incubator/stdcxx/trunk/tests/src/process.cpp?rev=590712&r1=590711&r2=590712&view=diff
==============================================================================
--- incubator/stdcxx/trunk/tests/src/process.cpp (original)
+++ incubator/stdcxx/trunk/tests/src/process.cpp Wed Oct 31 08:19:47 2007
@@ -524,8 +524,8 @@
 static void
 sig_handler (int)
 {
-    // restore the signal
-    signal (SIGCHLD, sig_handler);
+    // do not re-register for signal here. it causes
+    // a stack overflow problem on HP-UX and AIX.
 }
 
 }
@@ -545,12 +545,16 @@
 
     if (0 < timeout && 0 == ret) {
         // process still active, wait
-        sig_handler_t* old_handler = signal (SIGCHLD, sig_handler);
 
         unsigned utimeout = unsigned (timeout);
 
         do {
+            sig_handler_t* old_handler = signal (SIGCHLD, sig_handler);
+
             utimeout = sleep (utimeout);
+
+            signal (SIGCHLD, old_handler);
+
             if (utimeout) {
                 // possible that the child has exited
                 ret = waitpid (pid, &status, WNOHANG);
@@ -575,8 +579,6 @@
             }
         }
         while (false);
-
-        signal (SIGCHLD, old_handler);
     }
 
     if (ret == pid) {


Reply via email to