From ba71ce7427b854cdb34128c05b7b1413da02ddc9 Mon Sep 17 00:00:00 2001 From: Stefan Ritt Date: Wed, 24 Jul 2013 09:20:34 -0700 Subject: [PATCH] Added periodic alarm to avoid blocking send() --- src/elogd.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/elogd.c b/src/elogd.c index ebc26ae8..070ee866 100755 --- a/src/elogd.c +++ b/src/elogd.c @@ -28492,6 +28492,12 @@ void hup_handler(int sig) _hup = TRUE; } +void alarm_handler(int sig) +{ + if (sig) + alarm(3); +} + /*------------------------------------------------------------------*/ #ifdef HAVE_SSL @@ -28567,6 +28573,7 @@ void server_loop(void) struct sigaction ctrlc_handle; struct sigaction ignore_handle; struct sigaction hup_handle; + struct sigaction alarm_handle; #endif i_conn = content_length = 0; @@ -28739,7 +28746,14 @@ void server_loop(void) sigemptyset(&hup_handle.sa_mask); hup_handle.sa_flags = 0; sigaction(SIGHUP, &hup_handle, NULL); - + + alarm_handle.sa_handler = alarm_handler; + sigemptyset(&alarm_handle.sa_mask); + alarm_handle.sa_flags = 0; + sigaction(SIGALRM, &alarm_handle, NULL); + + alarm(3); // prevents blocking send() operations + /* give up root privilege */ if (geteuid() == 0) { if (!getcfg("global", "Grp", str, sizeof(str)) || setegroup(str) < 0) {