From: Florian Forster Date: Wed, 12 Sep 2012 16:25:20 +0000 (+0200) Subject: exec plugin: Really remove STDERR from the select() set. X-Git-Tag: collectd-5.0.5~4^2~13 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=dc0b5c71ffa2608bb63b1b2e63f52768681959c1 exec plugin: Really remove STDERR from the select() set. select(2) is actually using a variable called "copy", which we didn't set in this case. Fixes Github issue #12. Thanks to Tetsuya Kawaguchi for reporting this problem. --- diff --git a/src/exec.c b/src/exec.c index dd295e98..52747977 100644 --- a/src/exec.c +++ b/src/exec.c @@ -637,17 +637,22 @@ static void *exec_read_one (void *arg) /* {{{ */ if (len < 0) { - if (errno == EAGAIN || errno == EINTR) continue; + if (errno == EAGAIN || errno == EINTR) + continue; break; } else if (len == 0) { /* We've reached EOF */ - NOTICE ("exec plugin: Program `%s' has closed STDERR.", - pl->exec); - close (fd_err); + NOTICE ("exec plugin: Program `%s' has closed STDERR.", pl->exec); + + /* Remove file descriptor form select() set. */ FD_CLR (fd_err, &fdset); + copy = fdset; highest_fd = fd; + + /* Clean up file descriptor */ + close (fd_err); fd_err = -1; continue; }