From c161d54a6529647e4e7b2f64c1f5c3b1c4b8bbb8 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 28 Dec 2016 15:55:47 +1100 Subject: [PATCH] 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) --- CHANGES | 4 ++++ lib/dns/client.c | 23 ++++++----------------- lib/dns/include/dns/events.h | 5 ----- 3 files changed, 10 insertions(+), 22 deletions(-) diff --git a/CHANGES b/CHANGES index 3cc1bbd655..d2b8733ecb 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 3cfa1ea059..eefe66c4ec 100644 --- a/lib/dns/client.c +++ b/lib/dns/client.c @@ -2687,7 +2687,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; @@ -2742,7 +2742,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); @@ -2774,19 +2773,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); } @@ -2892,13 +2881,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 6d8b5a81a8..fecf5f5b57 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)