[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    icecream/daemon [POSSIBLY UNSAFE]
From:       Dirk Mueller <mueller () kde ! org>
Date:       2006-07-06 15:37:00
Message-ID: 1152200220.417965.2622.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 559106 by mueller:

fix assertion failures in daemon upon sigchild delivery


 M  +5 -4      environment.cpp   [POSSIBLY UNSAFE: system]
 M  +4 -1      main.cpp  


--- trunk/icecream/daemon/environment.cpp #559105:559106
@@ -363,15 +363,16 @@
             char buffer[PATH_MAX];
             snprintf( buffer, PATH_MAX, "rm -rf '/%s'", dirname.c_str() );
             system( buffer );
-            status = 1;
         } else {
-            if ( waitpid( pid, &status, 0) != pid )
-                status = 1;
-            mkdir( ( dirname + "/tmp" ).c_str(), 01775 );
+           mkdir( ( dirname + "/tmp" ).c_str(), 01775 );
             chown( ( dirname + "/tmp" ).c_str(), 0, nobody_gid );
             chmod( ( dirname + "/tmp" ).c_str(), 01775 );
         }
 
+        status = 1;
+        while ( waitpid( pid, &status, 0) < 0 && errno == EINTR) 
+            ;
+
         if ( status ) {
             return 0;
         } else {
--- trunk/icecream/daemon/main.cpp #559105:559106
@@ -854,7 +854,10 @@
 {
     struct rusage ru;
     int status;
-    pid_t child = wait3(&status, WNOHANG, &ru);
+    pid_t child;
+
+    while((child = wait3(&status, WNOHANG, &ru)) < 0 && errno == EINTR)
+        ;
     if ( child > 0 ) {
         JobDoneMsg *msg = jobmap[child];
         if ( msg )
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic