From: Bert Hubert Date: Thu, 10 Feb 2011 12:10:27 +0000 (+0000) Subject: perhaps this helps the signingpipe on freebsd.. X-Git-Tag: auth-3.0~248 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ac10b8c638639147471ffbb1b3b3477ec59d9b60;p=thirdparty%2Fpdns.git perhaps this helps the signingpipe on freebsd.. git-svn-id: svn://svn.powerdns.com/pdns/trunk/pdns@1999 d19b8d6e-7fed-0310-83ef-9ca221ded41b --- diff --git a/pdns/signingpipe.cc b/pdns/signingpipe.cc index 61ed09c114..4b5138be27 100644 --- a/pdns/signingpipe.cc +++ b/pdns/signingpipe.cc @@ -118,24 +118,26 @@ bool ChunkedSigningPipe::submit(const DNSResourceRecord& rr) pair, vector > ChunkedSigningPipe::waitForRW(bool rd, bool wr, int seconds) { - struct pollfd pfds[d_sockets.size()]; + vector pfds; for(unsigned int n = 0; n < d_sockets.size(); ++n) { - memset(&pfds[n], 0, sizeof(pfds[n])); - pfds[n].fd = d_sockets[n]; - if(!d_eof.count(n)) { - if(rd) - pfds[n].events |= POLLIN; - if(wr) - pfds[n].events |= POLLOUT; - } + if(d_eof.count(n)) + continue; + struct pollfd pfd; + memset(&pfd, 0, sizeof(pfd)); + pfd.fd = d_sockets[n]; + if(rd) + pfd.events |= POLLIN; + if(wr) + pfd.events |= POLLOUT; + pfds.push_back(pfd); } - int res = poll(pfds, d_sockets.size(), seconds * 1000); // negative = infinite + int res = poll(&pfds[0], pfds.size(), seconds * 1000); // negative = infinite if(res < 0) - unixDie("polling for activity from signers"); + unixDie("polling for activity from signers, "+lexical_cast(d_sockets.size())); pair, vector > vects; - for(unsigned int n = 0; n < d_sockets.size(); ++n) + for(unsigned int n = 0; n < pfds.size(); ++n) if(pfds[n].revents & POLLIN) vects.first.push_back(pfds[n].fd); else if(pfds[n].revents & POLLOUT)