From: Florian Forster Date: Tue, 19 Aug 2008 19:48:45 +0000 (+0200) Subject: memcached plugin: Fix a possible file descriptor leak. X-Git-Tag: collectd-4.3.4~12 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=e7929dac268957cbbd9082717759c3917ac1b51e;p=collectd.git 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 --- 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); } }