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
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
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
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
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