From: Mark Andrews Date: Wed, 28 Dec 2016 04:55:47 +0000 (+1100) Subject: 4543. [bug] dns_client_startupdate now delays sending the update X-Git-Tag: v9.10.5b1~26 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=3c3cba0a63df3c6f07392a52aa46acf35d0af664;p=thirdparty%2Fbind9.git 4543. [bug] dns_client_startupdate now delays sending the update request until isc_app_ctxrun has been called. [RT #43976] (cherry picked from commit 6f94747270f5249a29c5f1217340b40ff15c5230) --- diff --git a/CHANGES b/CHANGES index f40b213c326..51771947201 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +4543. [bug] dns_client_startupdate now delays sending the update + request until isc_app_ctxrun has been called. + [RT #43976] + 4541. [bug] rndc addzone should properly reject non master/slave zones. [RT #43665] diff --git a/lib/dns/client.c b/lib/dns/client.c index da318b56946..8fd0efe0212 100644 --- a/lib/dns/client.c +++ b/lib/dns/client.c @@ -2744,7 +2744,7 @@ dns_client_update(dns_client_t *client, dns_rdataclass_t rdclass, } static void -runintask(isc_task_t *task, isc_event_t *event) { +startupdate(isc_task_t *task, isc_event_t *event) { updatectx_t *uctx; isc_result_t result; unsigned int resoptions; @@ -2799,7 +2799,6 @@ dns_client_startupdate(dns_client_t *client, dns_rdataclass_t rdclass, dns_section_t section = DNS_SECTION_UPDATE; isc_sockaddr_t *server, *sa = NULL; dns_tsectype_t tsectype = dns_tsectype_none; - isc_event_t *runinevent; UNUSED(options); @@ -2831,19 +2830,9 @@ dns_client_startupdate(dns_client_t *client, dns_rdataclass_t rdclass, return (ISC_R_NOMEMORY); } - runinevent = isc_event_allocate(client->mctx, client->task, - DNS_EVENT_RUNIN, runintask, - uctx, sizeof(*runinevent)); - if (runinevent == NULL) { - dns_view_detach(&view); - isc_mem_put(client->mctx, uctx, sizeof(*uctx)); - return (ISC_R_NOMEMORY); - } - result = isc_mutex_init(&uctx->lock); if (result != ISC_R_SUCCESS) { dns_view_detach(&view); - isc_event_free(&runinevent); isc_mem_put(client->mctx, uctx, sizeof(*uctx)); return (ISC_R_NOMEMORY); } @@ -2949,13 +2938,13 @@ dns_client_startupdate(dns_client_t *client, dns_rdataclass_t rdclass, UNLOCK(&client->lock); *transp = (dns_clientupdatetrans_t *)uctx; - isc_task_send(client->task, &runinevent); - - return (ISC_R_SUCCESS); + result = isc_app_ctxonrun(client->actx, client->mctx, client->task, + startupdate, uctx); + if (result == ISC_R_SUCCESS) + return (result); + *transp = NULL; fail: - if (runinevent != NULL) - isc_event_free(&runinevent); if (ISC_LINK_LINKED(uctx, link)) { LOCK(&client->lock); ISC_LIST_UNLINK(client->updatectxs, uctx, link); diff --git a/lib/dns/include/dns/events.h b/lib/dns/include/dns/events.h index 6d8b5a81a82..fecf5f5b57a 100644 --- a/lib/dns/include/dns/events.h +++ b/lib/dns/include/dns/events.h @@ -80,11 +80,6 @@ #define DNS_EVENT_KEYDONE (ISC_EVENTCLASS_DNS + 50) #define DNS_EVENT_SETNSEC3PARAM (ISC_EVENTCLASS_DNS + 51) #define DNS_EVENT_SETSERIAL (ISC_EVENTCLASS_DNS + 52) -#define DNS_EVENT_CATZUPDATED (ISC_EVENTCLASS_DNS + 53) -#define DNS_EVENT_CATZADDZONE (ISC_EVENTCLASS_DNS + 54) -#define DNS_EVENT_CATZMODZONE (ISC_EVENTCLASS_DNS + 55) -#define DNS_EVENT_CATZDELZONE (ISC_EVENTCLASS_DNS + 56) -#define DNS_EVENT_RUNIN (ISC_EVENTCLASS_DNS + 57) #define DNS_EVENT_FIRSTEVENT (ISC_EVENTCLASS_DNS + 0) #define DNS_EVENT_LASTEVENT (ISC_EVENTCLASS_DNS + 65535)