From 065ad898cc6e9ca0323af440b13acca18bd244ed Mon Sep 17 00:00:00 2001 From: "/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org" Date: Tue, 19 Feb 2008 18:53:07 +0000 Subject: - implement a synchronous timer framework - fix crash when enabling pollinterval clause in flow-based accounting --- src/ulogd.c | 33 ++++++++++++++------------------- 1 file changed, 14 insertions(+), 19 deletions(-) (limited to 'src/ulogd.c') diff --git a/src/ulogd.c b/src/ulogd.c index de2fd96..da821ee 100644 --- a/src/ulogd.c +++ b/src/ulogd.c @@ -61,6 +61,7 @@ #include #include #include +#include #include #include #ifdef DEBUG @@ -828,27 +829,24 @@ out_buf: } -static int ulogd_main_loop(void) +static void ulogd_main_loop(void) { - int ret = 0; + int ret; + struct timeval next_alarm; + struct timeval *next = NULL; while (1) { - ret = ulogd_select_main(); - if (ret == 0) - continue; + /* XXX: signal blocking? */ + if (next != NULL && !timerisset(next)) + next = ulogd_do_timer_run(&next_alarm); + else + next = ulogd_get_next_timer_run(&next_alarm); - if (ret < 0) { - if (errno == -EINTR) - continue; - else { - ulogd_log(ULOGD_ERROR, "select returned %s\n", - strerror(errno)); - break; - } - } + ret = ulogd_select_main(next); + if (ret < 0 && errno != -EINTR) + ulogd_log(ULOGD_ERROR, "select says %s\n", + strerror(errno)); } - - return ret; } /* open the logfile */ @@ -953,9 +951,6 @@ static void signal_handler(int signal) sigterm_handler(signal); } break; - case SIGALRM: - ulogd_timer_check_n_run(); - break; default: break; } -- cgit v1.2.3