From e7929dac268957cbbd9082717759c3917ac1b51e Mon Sep 17 00:00:00 2001 From: Florian Forster Date: Tue, 19 Aug 2008 21:48:45 +0200 Subject: [PATCH] memcached plugin: Fix a possible file descriptor leak. Not sure if this fixes the reported bug, but it might.. Feedback would be welcome. References: #26 --- src/memcached.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/memcached.c b/src/memcached.c index c830598d..f65f0dad 100644 --- a/src/memcached.c +++ b/src/memcached.c @@ -127,17 +127,30 @@ static int memcached_query_daemon (char *buffer, int buffer_size) /* {{{ */ { struct pollfd p; - int n; + int timeout; + int status; + memset (&p, 0, sizeof (p)); p.fd = fd; - p.events = POLLIN|POLLERR|POLLHUP; + p.events = POLLIN | POLLERR | POLLHUP; p.revents = 0; - n = poll(&p, 1, 3); - - if (n <= 0) { - ERROR ("memcached: poll() failed or timed out"); - return -1; + status = poll (&p, /* nfds = */ 1, /* timeout = */ interval_g); + if (status <= 0) + { + if (status == 0) + { + ERROR ("memcached: poll(2) timed out after %i seconds.", interval_g); + } + else + { + char errbuf[1024]; + ERROR ("memcached: poll(2) failed: %s", + sstrerror (errno, errbuf, sizeof (errbuf))); + } + shutdown (fd, SHUT_RDWR); + close (fd); + return (-1); } } -- 2.11.0