memcached plugin: Fix a possible file descriptor leak.
authorFlorian Forster <octo@huhu.verplant.org>
Tue, 19 Aug 2008 19:48:45 +0000 (21:48 +0200)
committerFlorian Forster <octo@huhu.verplant.org>
Tue, 19 Aug 2008 19:48:45 +0000 (21:48 +0200)
Not sure if this fixes the reported bug, but it might.. Feedback would be
welcome.

References: #26

src/memcached.c

index c830598..f65f0da 100644 (file)
@@ -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);
                }
        }