From: Mukund Sivaraman Date: Tue, 5 Aug 2014 11:28:23 +0000 (+0530) Subject: [36720] Free event early (fixes race to free) X-Git-Tag: v9.11.0a1~1422 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=a338c2d94781f676283f1b110f7802c71e2015bd;p=thirdparty%2Fbind9.git [36720] Free event early (fixes race to free) Patch contributed by yhu2 . --- diff --git a/CHANGES b/CHANGES index 480ce6b1ac5..4b68841dfc7 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 fe43e94ef59..d16e3bd62bf 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); }