Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[pkgsrc/trunk]: pkgsrc/net/powerdns-recursor powerdns-recursor: Pull in upstr...



details:   https://anonhg.NetBSD.org/pkgsrc/rev/5f77e7630e5d
branches:  trunk
changeset: 429117:5f77e7630e5d
user:      jperkin <jperkin%pkgsrc.org@localhost>
date:      Thu Apr 16 13:09:28 2020 +0000

description:
powerdns-recursor: Pull in upstream patch to fix SunOS.

diffstat:

 net/powerdns-recursor/distinfo                      |   4 +-
 net/powerdns-recursor/patches/patch-portsmplexer.cc |  88 +++++++++++++++++++-
 2 files changed, 84 insertions(+), 8 deletions(-)

diffs (120 lines):

diff -r a39c2f141ebf -r 5f77e7630e5d net/powerdns-recursor/distinfo
--- a/net/powerdns-recursor/distinfo    Thu Apr 16 12:50:01 2020 +0000
+++ b/net/powerdns-recursor/distinfo    Thu Apr 16 13:09:28 2020 +0000
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.30 2020/03/17 19:07:29 adam Exp $
+$NetBSD: distinfo,v 1.31 2020/04/16 13:09:28 jperkin Exp $
 
 SHA1 (pdns-recursor-4.3.0.tar.bz2) = 8801c9ea575aa3bd88d793c252891d43ac529d31
 RMD160 (pdns-recursor-4.3.0.tar.bz2) = 9da059ca48866b31c577ea6b5a5ffd0cf9a08842
@@ -7,6 +7,6 @@
 SHA1 (patch-dns.hh) = 7e9c1b10a066a605b74ebdbee2d894aed50f6c68
 SHA1 (patch-ext_json11_json11.cpp) = 2de8ea8b51556bd3e3c1a88f681697eff239ab1a
 SHA1 (patch-iputils.hh) = 9de7c58db7468da9fd2a175464becdbe339fac9d
-SHA1 (patch-portsmplexer.cc) = b4d447d88d9f2a4e9c0dffb40a41a0e5fde7255a
+SHA1 (patch-portsmplexer.cc) = 3e5232e0fc0a4e57aa74b6ebd594291598e7eb66
 SHA1 (patch-qtype.hh) = f14eb9ad7efc7dd4a0ce220c1f93044ef69e99c2
 SHA1 (patch-version.cc) = 26226a02198edd9d8890a5199ee5a8051334fe41
diff -r a39c2f141ebf -r 5f77e7630e5d net/powerdns-recursor/patches/patch-portsmplexer.cc
--- a/net/powerdns-recursor/patches/patch-portsmplexer.cc       Thu Apr 16 12:50:01 2020 +0000
+++ b/net/powerdns-recursor/patches/patch-portsmplexer.cc       Thu Apr 16 13:09:28 2020 +0000
@@ -1,17 +1,93 @@
-$NetBSD: patch-portsmplexer.cc,v 1.1 2018/01/02 12:23:55 fhajny Exp $
+$NetBSD: patch-portsmplexer.cc,v 1.2 2020/04/16 13:09:28 jperkin Exp $
 
-Work around invalid cast to binary operator.
+Pull in upstream patch from https://github.com/PowerDNS/pdns/pull/9031
 
---- portsmplexer.cc.orig       2017-12-04 12:51:03.000000000 +0000
+--- portsmplexer.cc.orig       2020-04-16 12:54:40.155420464 +0000
 +++ portsmplexer.cc
-@@ -85,8 +85,8 @@ int PortsFDMultiplexer::run(struct timev
+@@ -23,11 +23,12 @@ public:
+     close(d_portfd);
+   }
+ 
+-  virtual int run(struct timeval* tv, int timeout=500);
++  virtual int run(struct timeval* tv, int timeout=500) override;
++  virtual void getAvailableFDs(std::vector<int>& fds, int timeout) override;
+ 
+-  virtual void addFD(callbackmap_t& cbmap, int fd, callbackfunc_t toDo, const boost::any& parameter, const struct timeval* ttd=nullptr);
+-  virtual void removeFD(callbackmap_t& cbmap, int fd);
+-  string getName()
++  virtual void addFD(callbackmap_t& cbmap, int fd, callbackfunc_t toDo, const boost::any& parameter, const struct timeval* ttd=nullptr) override;
++  virtual void removeFD(callbackmap_t& cbmap, int fd) override;
++  string getName() const override
+   {
+     return "solaris completion ports";
+   }
+@@ -78,6 +79,58 @@ void PortsFDMultiplexer::removeFD(callba
+     throw FDMultiplexerException("Removing fd from port set: "+stringerror());
+ }
+ 
++void PortsFDMultiplexer::getAvailableFDs(std::vector<int>& fds, int timeout)
++{
++  struct timespec timeoutspec;
++  timeoutspec.tv_sec = timeout / 1000;
++  timeoutspec.tv_nsec = (timeout % 1000) * 1000000;
++  unsigned int numevents = 1;
++  int ret = port_getn(d_portfd, d_pevents.get(), min(PORT_MAX_LIST, s_maxevents), &numevents, &timeoutspec);
++
++  /* port_getn has an unusual API - (ret == -1, errno == ETIME) can
++     mean partial success; you must check (*numevents) in this case
++     and process anything in there, otherwise you'll never see any
++     events from that object again. We don't care about pure timeouts
++     (ret == -1, errno == ETIME, *numevents == 0) so we don't bother
++     with that case. */
++  if (ret == -1 && errno != ETIME) {
++    if (errno != EINTR) {
++      throw FDMultiplexerException("completion port_getn returned error: " + stringerror());
++    }
++
++    // EINTR is not really an error
++    return;
++  }
++
++  if (numevents == 0) {
++    // nothing
++    return;
++  }
++
++  fds.reserve(numevents);
++
++  for (unsigned int n = 0; n < numevents; ++n) {
++    const auto fd = d_pevents[n].portev_object;
++
++    /* we need to re-associate the FD */
++    if (d_readCallbacks.count(fd)) {
++      if (port_associate(d_portfd, PORT_SOURCE_FD, fd, POLLIN, 0) < 0) {
++        throw FDMultiplexerException("Unable to add fd back to ports (read): " + stringerror());
++      }
++    }
++    else if (d_writeCallbacks.count(fd)) {
++      if (port_associate(d_portfd, PORT_SOURCE_FD, fd, POLLOUT, 0) < 0) {
++        throw FDMultiplexerException("Unable to add fd back to ports (write): " + stringerror());
++      }
++    } else {
++      /* not registered, this is unexpected */
++      continue;
++    }
++
++    fds.push_back(fd);
++  }
++}
++
+ int PortsFDMultiplexer::run(struct timeval* now, int timeout)
+ {
+   if(d_inrun) {
+@@ -85,8 +138,8 @@ int PortsFDMultiplexer::run(struct timev
    }
    
    struct timespec timeoutspec;
 -  timeoutspec.tv_sec = time / 1000;
 -  timeoutspec.tv_nsec = (time % 1000) * 1000000;
-+  timeoutspec.tv_sec = (intptr_t)time / 1000;
-+  timeoutspec.tv_nsec = ((intptr_t)time % 1000) * 1000000;
++  timeoutspec.tv_sec = timeout / 1000;
++  timeoutspec.tv_nsec = (timeout % 1000) * 1000000;
    unsigned int numevents=1;
    int ret= port_getn(d_portfd, d_pevents.get(), min(PORT_MAX_LIST, s_maxevents), &numevents, &timeoutspec);
    



Home | Main Index | Thread Index | Old Index