]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
2797. [bug] Don't decrement the dispatch manager's maxbuffers.
authorMark Andrews <marka@isc.org>
Wed, 2 Dec 2009 23:15:14 +0000 (23:15 +0000)
committerMark Andrews <marka@isc.org>
Wed, 2 Dec 2009 23:15:14 +0000 (23:15 +0000)
                        [RT #20613]

CHANGES
lib/dns/dispatch.c

diff --git a/CHANGES b/CHANGES
index 356ced04c1f8f6abf7472b04c021e5ed497d0b57..2469aef5de26666ed8be07f1a2c2884fa42a3ac2 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,6 @@
+2797.  [bug]           Don't decrement the dispatch manager's maxbuffers.
+                       [RT #20613]
+
 2796.  [bug]           Missing dns_rdataset_disassociate() call in
                        dns_nsec3_delnsec3sx(). [RT #20681]
 
index 9fa3500882627ab526562e3e5e21234ea49fb102..1d65ce43f4c157f900c1fedb3c14c1881152e973 100644 (file)
@@ -15,7 +15,7 @@
  * PERFORMANCE OF THIS SOFTWARE.
  */
 
-/* $Id: dispatch.c,v 1.167 2009/11/25 23:49:21 tbox Exp $ */
+/* $Id: dispatch.c,v 1.168 2009/12/02 23:15:14 marka Exp $ */
 
 /*! \file */
 
@@ -2111,8 +2111,18 @@ dns_dispatchmgr_setudp(dns_dispatchmgr_t *mgr,
 
        /* Create or adjust buffer pool */
        if (mgr->bpool != NULL) {
-               isc_mempool_setmaxalloc(mgr->bpool, maxbuffers);
-               mgr->maxbuffers = maxbuffers;
+               /*
+                * We only increase the maxbuffers to avoid accidental buffer
+                * shortage.  Ideally we'd separate the manager-wide maximum
+                * from per-dispatch limits and respect the latter within the
+                * global limit.  But at this moment that's deemed to be
+                * overkilling and isn't worth additional implementation
+                * complexity.
+                */
+               if (maxbuffers > mgr->maxbuffers) {
+                       isc_mempool_setmaxalloc(mgr->bpool, maxbuffers);
+                       mgr->maxbuffers = maxbuffers;
+               }
        } else {
                result = isc_mempool_create(mgr->mctx, buffersize, &mgr->bpool);
                if (result != ISC_R_SUCCESS) {