Reordering some of the daemonization code.
authorScott Cantor <cantor.2@osu.edu>
Fri, 5 Jun 2009 20:17:40 +0000 (20:17 +0000)
committerScott Cantor <cantor.2@osu.edu>
Fri, 5 Jun 2009 20:17:40 +0000 (20:17 +0000)
shibd/shibd.cpp

index 036cd21..47e21b1 100644 (file)
@@ -150,7 +150,7 @@ int real_main(int preinit)
                 return -3;\r
             }\r
             else if (!listener->run(&shibd_shutdown)) {\r
-                fprintf(stderr, "listener failed to begin service\n");\r
+                fprintf(stderr, "listener failed during service\n");\r
                 listener->term();\r
                 conf.term();\r
                 return -3;\r
@@ -324,8 +324,7 @@ int main(int argc, char *argv[])
     if (daemonize) {\r
         // We must fork() early, while we're single threaded.\r
         // StorageService cleanup thread is about to start.\r
-        pid_t pid = fork();\r
-        switch (pid) {\r
+        switch (fork()) {\r
             case 0:\r
                 break;\r
             case -1:\r
@@ -333,22 +332,7 @@ int main(int argc, char *argv[])
                 exit(EXIT_FAILURE);\r
             default:\r
                 sleep(daemon_wait);\r
-                if (shibd_running) {\r
-                    if (pidfile) {\r
-                        FILE* pidf = fopen(pidfile, "w");\r
-                        if (pidf) {\r
-                            fprintf(pidf, "%d\n", pid);\r
-                            fclose(pidf);\r
-                        }\r
-                        else {\r
-                            perror(pidfile);\r
-                        }\r
-                    }\r
-                    exit(EXIT_SUCCESS);\r
-                }\r
-                else {\r
-                    exit(EXIT_FAILURE);\r
-                }\r
+                exit(shibd_running ? EXIT_SUCCESS : EXIT_FAILURE);\r
         }\r
     }\r
 \r
@@ -361,6 +345,14 @@ int main(int argc, char *argv[])
     if (shar_checkonly)\r
         fprintf(stderr, "overall configuration is loadable, check console for non-fatal problems\n");\r
     else {\r
+        // Init the listener.\r
+        ListenerService* listener = conf.getServiceProvider()->getListenerService();\r
+        if (!listener->init(unlink_socket)) {\r
+            fprintf(stderr, "listener failed to initialize\n");\r
+            conf.term();\r
+            return -3;\r
+        }\r
+\r
         if (daemonize) {\r
             if (setsid() == -1) {\r
                 perror("setsid");\r
@@ -370,31 +362,29 @@ int main(int argc, char *argv[])
                 perror("chdir to root");\r
                 exit(EXIT_FAILURE);\r
             }\r
-        }\r
 \r
-        if (daemonize) {\r
+            if (pidfile) {\r
+                FILE* pidf = fopen(pidfile, "w");\r
+                if (pidf) {\r
+                    fprintf(pidf, "%d\n", pid);\r
+                    fclose(pidf);\r
+                }\r
+                else {\r
+                    perror(pidfile);\r
+                }\r
+            }\r
+\r
             freopen("/dev/null", "r", stdin);\r
             freopen("/dev/null", "w", stdout);\r
             freopen("/dev/null", "w", stderr);\r
-        }\r
-\r
-        // Init the listener.\r
-        ListenerService* listener = conf.getServiceProvider()->getListenerService();\r
-        if (!listener->init(unlink_socket)) {\r
-            fprintf(stderr, "listener failed to initialize\n");\r
-            conf.term();\r
-            return -3;\r
-        }\r
 \r
-        // Signal our parent.\r
-        if (daemonize) {\r
-            pid_t ppid = getppid();\r
-            kill(ppid, SIGUSR1);\r
+            // Signal our parent that we are A-OK.\r
+            kill(getppid(), SIGUSR1);\r
         }\r
 \r
         // Run the listener.\r
         if (!listener->run(&shibd_shutdown)) {\r
-            fprintf(stderr, "listener failed to begin service\n");\r
+            fprintf(stderr, "listener failure during service\n");\r
             listener->term();\r
             conf.term();\r
             if (pidfile)\r