From 2a0d4c4d6ba5addb33cd1bccecc55ca4a095f191 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 2 Dec 2009 23:15:14 +0000 Subject: [PATCH] 2797. [bug] Don't decrement the dispatch manager's maxbuffers. [RT #20613] --- CHANGES | 3 +++ lib/dns/dispatch.c | 16 +++++++++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) 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) {