summaryrefslogtreecommitdiffstats
path: root/src/ulogd.c
diff options
context:
space:
mode:
author/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>2008-02-19 18:53:07 +0000
committer/C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org </C=EU/ST=EU/CN=Pablo Neira Ayuso/emailAddress=pablo@netfilter.org>2008-02-19 18:53:07 +0000
commit065ad898cc6e9ca0323af440b13acca18bd244ed (patch)
treecc64405b75a002024d70ecbe8a753eb518624bfa /src/ulogd.c
parent205a824884833d786bdeb3c6ceda2e6a16316dfb (diff)
- implement a synchronous timer framework
- fix crash when enabling pollinterval clause in flow-based accounting
Diffstat (limited to 'src/ulogd.c')
-rw-r--r--src/ulogd.c33
1 files changed, 14 insertions, 19 deletions
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 <pwd.h>
#include <grp.h>
#include <syslog.h>
+#include <sys/time.h>
#include <ulogd/conffile.h>
#include <ulogd/ulogd.h>
#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;
}