X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Fmain.c;h=025c5a291ff8d2e66c12c1c5c5736a21ad680bcf;hb=dae3c8b486e3283767205fd78cdf4eb1840c4ef6;hp=299fd0d875f8063a593d03ad3a7e7a00a16df2ff;hpb=d3372da97568d5e1f35fa19787c8ec8af93a0435;p=doldaconnect.git diff --git a/daemon/main.c b/daemon/main.c index 299fd0d..025c5a2 100644 --- a/daemon/main.c +++ b/daemon/main.c @@ -371,17 +371,17 @@ int main(int argc, char **argv) char *configfile; char *pidfile; FILE *pfstream, *confstream; - int delay; + int delay, immsyslog; struct module *mod; - struct timer *timer, *ntimer; + struct timer *timer; struct child *child; double now; - nofork = 0; + immsyslog = nofork = 0; syslogfac = LOG_DAEMON; configfile = NULL; pidfile = NULL; - while((c = getopt(argc, argv, "p:C:f:hn")) != -1) + while((c = getopt(argc, argv, "p:C:f:hns")) != -1) { switch(c) { @@ -424,16 +424,24 @@ int main(int argc, char **argv) case 'n': nofork = 1; break; + case 's': + immsyslog = 1; + break; case 'h': case ':': case '?': default: - printf("usage: doldacond [-hn] [-C configfile] [-p pidfile] [-f facility]\n"); + printf("usage: doldacond [-hns] [-C configfile] [-p pidfile] [-f facility]\n"); exit(c != 'h'); } } setlocale(LC_ALL, ""); initlog(); + if(immsyslog) + { + logtosyslog = 1; + logtostderr = 0; + } signal(SIGPIPE, SIG_IGN); signal(SIGHUP, handler); signal(SIGINT, handler); @@ -519,20 +527,23 @@ int main(int argc, char **argv) } pollsocks(delay); now = ntime(); - for(timer = timers; timer != NULL; timer = ntimer) + do { - ntimer = timer->next; - if(now < timer->at) - continue; - if(timer->prev != NULL) - timer->prev->next = timer->next; - if(timer->next != NULL) - timer->next->prev = timer->prev; - if(timer == timers) - timers = timer->next; - timer->func(0, timer->data); - free(timer); - } + for(timer = timers; timer != NULL; timer = timer->next) + { + if(now < timer->at) + continue; + if(timer->prev != NULL) + timer->prev->next = timer->next; + if(timer->next != NULL) + timer->next->prev = timer->prev; + if(timer == timers) + timers = timer->next; + timer->func(0, timer->data); + free(timer); + break; + } + } while(timer != NULL); do { for(child = children; child != NULL; child = child->next) @@ -554,5 +565,7 @@ int main(int argc, char **argv) } flog(LOG_INFO, "terminating..."); terminate(); + if(pidfile != NULL) + unlink(pidfile); return(0); }