Allow half a second for a working pidfile to be created and a tenth of a second for a daemon to bail.

This commit is contained in:
Roy Marples 2007-10-23 09:05:19 +00:00
parent 2d7f57d462
commit c30b64a63a

View File

@ -13,7 +13,8 @@
/* nano seconds */
#define POLL_INTERVAL 20000000
#define START_WAIT 500000000
#define WAIT_PIDFILE 500000000
#define START_WAIT 100000000
#define ONE_SECOND 1000000000
#include <sys/types.h>
@ -974,8 +975,8 @@ int start_stop_daemon (int argc, char **argv)
if (START_WAIT > 0) {
struct timespec ts;
int nloops = START_WAIT / POLL_INTERVAL;
int nloopsp = WAIT_PIDFILE / POLL_INTERVAL;
bool alive = false;
bool retestpid = false;
ts.tv_sec = 0;
ts.tv_nsec = POLL_INTERVAL;
@ -989,6 +990,14 @@ int start_stop_daemon (int argc, char **argv)
return (0);
}
}
/* We wait for a specific amount of time for a pidfile to be
* created. Once everything is in place we then wait some more
* to ensure that the daemon really is running and won't abort due
* to a config error. */
if (! background && pidfile && nloopsp)
nloopsp --;
else
nloops --;
/* This is knarly.
@ -1005,9 +1014,8 @@ int start_stop_daemon (int argc, char **argv)
/* The pidfile may not have been written yet - give it some time */
if (get_pid (pidfile, true) == -1) {
alive = true;
retestpid = true;
} else {
retestpid = false;
nloopsp = 0;
if (do_stop (NULL, NULL, pidfile, uid, 0,
true, false, true) > 0)
alive = true;
@ -1022,12 +1030,6 @@ int start_stop_daemon (int argc, char **argv)
if (! alive)
eerrorx ("%s: %s died", applet, exec);
}
if (retestpid) {
if (do_stop (NULL, NULL, pidfile, uid, 0, true,
false, true) < 1)
eerrorx ("%s: %s died", applet, exec);
}
}
if (svcname)