diff --git a/CHANGES b/CHANGES index 356ced04c1..2469aef5de 100644 --- 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] diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 9fa3500882..1d65ce43f4 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -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) {