From 3737d85cd34fb4b7148726d0bdef9d4b68477f96 Mon Sep 17 00:00:00 2001 From: oetiker Date: Thu, 25 Sep 2008 20:31:29 +0000 Subject: [PATCH] This fixes a couple problems when exiting due to signal: * connection threads exit without closing client socket (so client blocks waiting for response that never comes) * listen_queue_thread blocks on poll() until a new connection comes in (because no poll timeout specified) -- kevin brintnall git-svn-id: svn://svn.oetiker.ch/rrdtool/trunk@1525 a5681a0c-68f1-0310-ab6d-d61299d08faa --- program/src/rrd_daemon.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/program/src/rrd_daemon.c b/program/src/rrd_daemon.c index f1221e3e..c4380281 100644 --- a/program/src/rrd_daemon.c +++ b/program/src/rrd_daemon.c @@ -1479,12 +1479,11 @@ static void *connection_thread_main (void *args) /* {{{ */ status = handle_request (fd, buffer, /*buffer_size=*/ status); if (status != 0) - { - close (fd); break; - } } + close(fd); + self = pthread_self (); /* Remove this thread from the connection threads list */ pthread_mutex_lock (&connection_threads_lock); @@ -1748,8 +1747,12 @@ static void *listen_thread_main (void *args __attribute__((unused))) /* {{{ */ pollfds[i].revents = 0; } - status = poll (pollfds, pollfds_num, /* timeout = */ -1); - if (status < 1) + status = poll (pollfds, pollfds_num, /* timeout = */ 1000); + if (status == 0) + { + continue; /* timeout */ + } + else if (status < 0) { status = errno; if (status != EINTR) -- 2.30.2