From a338c2d94781f676283f1b110f7802c71e2015bd Mon Sep 17 00:00:00 2001 From: Mukund Sivaraman Date: Tue, 5 Aug 2014 16:58:23 +0530 Subject: [PATCH] [36720] Free event early (fixes race to free) Patch contributed by yhu2 . --- CHANGES | 2 ++ lib/dns/view.c | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/CHANGES b/CHANGES index 480ce6b1ac..4b68841dfc 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,5 @@ +3910. [bug] Fix races to free event during shutdown. [RT#36720] + 3909. [bug] When computing the number of elements required for a acl count_acl_elements could have a short count leading to a assertion failure. Also zero out new acl elements diff --git a/lib/dns/view.c b/lib/dns/view.c index fe43e94ef5..d16e3bd62b 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -627,6 +627,8 @@ resolver_shutdown(isc_task_t *task, isc_event_t *event) { UNUSED(task); + isc_event_free(&event); + LOCK(&view->lock); view->attributes |= DNS_VIEWATTR_RESSHUTDOWN; @@ -634,8 +636,6 @@ resolver_shutdown(isc_task_t *task, isc_event_t *event) { UNLOCK(&view->lock); - isc_event_free(&event); - if (done) destroy(view); } @@ -651,6 +651,8 @@ adb_shutdown(isc_task_t *task, isc_event_t *event) { UNUSED(task); + isc_event_free(&event); + LOCK(&view->lock); view->attributes |= DNS_VIEWATTR_ADBSHUTDOWN; @@ -658,8 +660,6 @@ adb_shutdown(isc_task_t *task, isc_event_t *event) { UNLOCK(&view->lock); - isc_event_free(&event); - if (done) destroy(view); } @@ -675,6 +675,8 @@ req_shutdown(isc_task_t *task, isc_event_t *event) { UNUSED(task); + isc_event_free(&event); + LOCK(&view->lock); view->attributes |= DNS_VIEWATTR_REQSHUTDOWN; @@ -682,8 +684,6 @@ req_shutdown(isc_task_t *task, isc_event_t *event) { UNLOCK(&view->lock); - isc_event_free(&event); - if (done) destroy(view); }