[rrd-developers] [PATCH] rrdcached: non-blocking shutdown
kevin brintnall
kbrint at rufus.net
Thu Sep 25 22:28:31 CEST 2008
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 =~ /kbrint at rufus.net/
-----------------------------------------------------------------
diff --git a/src/rrd_daemon.c b/src/rrd_daemon.c
index 436d0a0..6ac624b 100644
--- a/src/rrd_daemon.c
+++ b/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);
@@ -1710,8 +1709,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)
More information about the rrd-developers
mailing list