]> git.ipfire.org Git - thirdparty/pdns.git/commitdiff
pipebackend coprocess: stop using select()
authorPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 31 Jul 2019 13:59:54 +0000 (15:59 +0200)
committerPeter van Dijk <peter.van.dijk@powerdns.com>
Wed, 31 Jul 2019 14:58:17 +0000 (16:58 +0200)
modules/pipebackend/coprocess.cc

index f3967301d07c35e06ae9a23f85f63b808fdc2dd0..db0ed5c1833ce2a6d05d5baafe4beef844a6a04f 100644 (file)
@@ -78,7 +78,7 @@ void CoProcess::launch(const char **argv, int timeout, int infd, int outfd)
     if(!(d_fp=fdopen(d_fd2[0],"r")))
       throw PDNSException("Unable to associate a file pointer with pipe: "+stringerror());
     if( d_timeout)
-      setbuf(d_fp,0); // no buffering please, confuses select
+      setbuf(d_fp,0); // no buffering please, confuses poll
   }
   else if(!d_pid) { // child
     signal(SIGCHLD, SIG_DFL); // silence a warning from perl
@@ -165,14 +165,7 @@ void CoProcess::receive(string &receive)
   receive.clear();
     
   if(d_timeout) {
-    struct timeval tv;
-    tv.tv_sec=d_timeout/1000;
-    tv.tv_usec=(d_timeout % 1000) * 1000;
-
-    fd_set rds;
-    FD_ZERO(&rds);
-    FD_SET(fileno(d_fp),&rds);
-    int ret=select(fileno(d_fp)+1,&rds,0,0,&tv);
+    int ret = waitForData(fileno(d_fp), 0, d_timeout * 1000);
     if(ret<0)
       throw PDNSException("Error waiting on data from coprocess: "+stringerror());
     if(!ret)