exec plugin: incorrectly exited select loop on signal.
authorGerrie Roos <groos@xiplink.com>
Tue, 10 Jan 2012 07:00:42 +0000 (09:00 +0200)
committerFlorian Forster <octo@collectd.org>
Fri, 17 Feb 2012 13:32:53 +0000 (14:32 +0100)
Sometimes dead modules won't be started up correctly or running ones
would not generate stats anymore.  Problem manifests more often under
load and on multicore hw

Change-Id: Ifb70a74c0cd55fc421b65a1f4332147916eadb70
Signed-off-by: Florian Forster <octo@collectd.org>
src/exec.c

index 639b5d4..c48d85f 100644 (file)
@@ -580,10 +580,18 @@ static void *exec_read_one (void *arg) /* {{{ */
   /* We use a copy of fdset, as select modifies it */
   copy = fdset;
 
-  while (select(highest_fd + 1, &copy, NULL, NULL, NULL ) > 0)
+  while (1)
   {
     int len;
 
+    status = select (highest_fd + 1, &copy, NULL, NULL, NULL);
+    if (status < 0)
+    {
+      if (errno == EINTR)
+       continue;
+      break;
+    }
+
     if (FD_ISSET(fd, &copy))
     {
       char *pnl;