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.8.8b2~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8774f78502e45b952b6bcda7822b35b2813ed4b3;p=thirdparty%2Fbind9.git [36720] Free event early (fixes race to free) Patch contributed by yhu2 . (cherry picked from commit a338c2d94781f676283f1b110f7802c71e2015bd) --- diff --git a/CHANGES b/CHANGES index 4c4d08555a0..dd4a5d2db73 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 4bfe203ccbd..e0d5864967c 100644 --- a/lib/dns/view.c +++ b/lib/dns/view.c @@ -603,6 +603,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; @@ -610,8 +612,6 @@ resolver_shutdown(isc_task_t *task, isc_event_t *event) { UNLOCK(&view->lock); - isc_event_free(&event); - if (done) destroy(view); } @@ -627,6 +627,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; @@ -634,8 +636,6 @@ adb_shutdown(isc_task_t *task, isc_event_t *event) { UNLOCK(&view->lock); - isc_event_free(&event); - if (done) destroy(view); } @@ -651,6 +651,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; @@ -658,8 +660,6 @@ req_shutdown(isc_task_t *task, isc_event_t *event) { UNLOCK(&view->lock); - isc_event_free(&event); - if (done) destroy(view); }