X-Git-Url: http://git.madism.org/?a=blobdiff_plain;f=postlicyd.c;h=051e83baef720a962058c61644f1cc26b20e18ac;hb=1ff926eac33152aee930a454ac1d3dec6e6e5faf;hp=bc8eeea02b9fb56c305b785b7f360c8119d16588;hpb=c0cfcd4c414bd423e4766ff6c90850ee25c9b449;p=apps%2Fpfixtools.git diff --git a/postlicyd.c b/postlicyd.c index bc8eeea..051e83b 100644 --- a/postlicyd.c +++ b/postlicyd.c @@ -1,5 +1,5 @@ /******************************************************************************/ -/* postlicyd: a postfix policy daemon with a lot of features */ +/* pfixtools: a collection of postfix related tools */ /* ~~~~~~~~~ */ /* ________________________________________________________________________ */ /* */ @@ -37,61 +37,51 @@ #include #include -#include "postlicyd.h" +#include "common.h" -static bool cleanexit = false; -static bool sigint = false; +volatile int nbthreads = 0; -static void main_sighandler(int sig) -{ - static time_t lastintr = 0; - time_t now = time(NULL); - - switch (sig) { - case SIGINT: - if (sigint) { - if (now - lastintr >= 1) - break; - } else { - lastintr = now; - sigint = true; - } - return; - - case SIGTERM: - break; - - default: - return; - } - - syslog(LOG_ERR, "Killed..."); - exit(-1); -} - -static void main_initialize(void) +static int main_initialize(void) { openlog("postlicyd", LOG_PID, LOG_MAIL); signal(SIGPIPE, SIG_IGN); - signal(SIGINT, &main_sighandler); - signal(SIGTERM, &main_sighandler); + signal(SIGINT, &common_sighandler); + signal(SIGTERM, &common_sighandler); syslog(LOG_INFO, "Starting..."); + return 0; +} + +void *job_run(void *_fd) +{ + int fd = (intptr_t)_fd; + + close(fd); + return NULL; } static void main_loop(void) { + int sock = -1; + while (!sigint) { - int fd = accept(-1, NULL, 0); + int fd = accept(sock, NULL, 0); + pthread_attr_t attr; + pthread_t dummy; if (fd < 0) { - if (errno == EINTR || errno == EAGAIN) - continue; - syslog(LOG_ERR, "accept error: %m"); - return; + if (errno != EINTR || errno != EAGAIN) + UNIXERR("accept"); + continue; } - //pthread_create(NULL, NULL, job_run, (intptr_t)fd); + pthread_attr_init(&attr); + pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); + pthread_create(&dummy, &attr, job_run, (void *)(intptr_t)fd); + pthread_attr_destroy(&attr); } + + cleanexit = true; + close(sock); } static void main_shutdown(void) @@ -100,16 +90,17 @@ static void main_shutdown(void) closelog(); } +module_init(main_initialize); +module_exit(main_shutdown); + int main(void) { - if (atexit(main_shutdown)) { + if (atexit(common_shutdown)) { fputs("Cannot hook my atexit function, quitting !\n", stderr); return EXIT_FAILURE; } - main_initialize(); + common_initialize(); main_loop(); - cleanexit = true; - main_shutdown(); return EXIT_SUCCESS; }