nsjail: clearer new_proc/reap_proc loop
authorRobert Swiecki <robert@swiecki.net>
Mon, 23 Jul 2018 22:23:44 +0000 (00:23 +0200)
committerRobert Swiecki <robert@swiecki.net>
Mon, 23 Jul 2018 22:23:44 +0000 (00:23 +0200)
nsjail.cc

index e6c29a6..830f554 100644 (file)
--- a/nsjail.cc
+++ b/nsjail.cc
@@ -141,35 +141,30 @@ static int listenMode(nsjconf_t* nsjconf) {
 }
 
 static int standaloneMode(nsjconf_t* nsjconf) {
-       if (!subproc::runChild(nsjconf, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO)) {
-               LOG_E("Couldn't launch the child process");
-               return 0xff;
-       }
        for (;;) {
-               int child_status = subproc::reapProc(nsjconf);
-
-               if (subproc::countProc(nsjconf) == 0) {
-                       if (nsjconf->mode == MODE_STANDALONE_ONCE) {
-                               return child_status;
+               if (!subproc::runChild(nsjconf, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO)) {
+                       LOG_E("Couldn't launch the child process");
+                       return 0xff;
+               }
+               for (;;) {
+                       int child_status = subproc::reapProc(nsjconf);
+                       if (subproc::countProc(nsjconf) == 0) {
+                               if (nsjconf->mode == MODE_STANDALONE_ONCE) {
+                                       return child_status;
+                               }
+                               break;
                        }
-                       if (!subproc::runChild(
-                               nsjconf, STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO)) {
-                               LOG_E("Couldn't launch the child process");
-                               return 0xff;
+                       if (showProc) {
+                               showProc = false;
+                               subproc::displayProc(nsjconf);
                        }
-                       continue;
-               }
-               if (showProc) {
-                       showProc = false;
-                       subproc::displayProc(nsjconf);
-               }
-               if (sigFatal > 0) {
-                       subproc::killAll(nsjconf);
-                       logs::logStop(sigFatal);
-                       return (128 + sigFatal);
+                       if (sigFatal > 0) {
+                               subproc::killAll(nsjconf);
+                               logs::logStop(sigFatal);
+                               return (128 + sigFatal);
+                       }
+                       pause();
                }
-
-               pause();
        }
        // not reached
 }