From: Mark Andrews Date: Thu, 4 Mar 2021 06:22:01 +0000 (+1100) Subject: Move cleanup of queries to later in the shutdown sequence X-Git-Tag: v9.17.11~15^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4015af02d8bcce34435001bf69892bd3a209a877;p=thirdparty%2Fbind9.git Move cleanup of queries to later in the shutdown sequence to avoid TSAN report WARNING: ThreadSanitizer: data race Write of size 8 at 0x000000000001 by main thread: #0 free #1 default_memfree lib/isc/mem.c:440 #2 mem_put lib/isc/mem.c:363 #3 isc__mem_free lib/isc/mem.c:1012 #4 main bin/tools/mdig.c:2231 Previous read of size 1 at 0x000000000005 by thread T1: #0 dns_name_fromtext lib/dns/name.c:1121 #1 sendquery bin/tools/mdig.c:596 #2 sendqueries bin/tools/mdig.c:779 #3 dispatch lib/isc/task.c:1153 #4 run lib/isc/task.c:1345 #5 isc__trampoline_run lib/isc/trampoline.c:184 #6 Thread T1 (running) created by main thread at: #0 pthread_create #1 isc_thread_create pthreads/thread.c:79 #2 isc_taskmgr_create lib/isc/task.c:1435 #3 main bin/tools/mdig.c:2148 SUMMARY: ThreadSanitizer: data race in __interceptor_free --- diff --git a/bin/tools/mdig.c b/bin/tools/mdig.c index 884075b9cf8..d48b3e995be 100644 --- a/bin/tools/mdig.c +++ b/bin/tools/mdig.c @@ -2211,6 +2211,25 @@ main(int argc, char *argv[]) { (void)isc_app_run(); + dns_view_detach(&view); + + dns_requestmgr_shutdown(requestmgr); + dns_requestmgr_detach(&requestmgr); + + dns_dispatch_detach(&dispatchvx); + dns_dispatchmgr_destroy(&dispatchmgr); + + isc_socketmgr_destroy(&socketmgr); + isc_timermgr_destroy(&timermgr); + + isc_task_shutdown(task); + isc_task_detach(&task); + isc_taskmgr_destroy(&taskmgr); + + dst_lib_destroy(); + + isc_log_destroy(&lctx); + query = ISC_LIST_HEAD(queries); while (query != NULL) { struct query *next = ISC_LIST_NEXT(query, link); @@ -2236,25 +2255,6 @@ main(int argc, char *argv[]) { isc_mem_free(mctx, default_query.ecs_addr); } - dns_view_detach(&view); - - dns_requestmgr_shutdown(requestmgr); - dns_requestmgr_detach(&requestmgr); - - dns_dispatch_detach(&dispatchvx); - dns_dispatchmgr_destroy(&dispatchmgr); - - isc_socketmgr_destroy(&socketmgr); - isc_timermgr_destroy(&timermgr); - - isc_task_shutdown(task); - isc_task_detach(&task); - isc_taskmgr_destroy(&taskmgr); - - dst_lib_destroy(); - - isc_log_destroy(&lctx); - isc_mem_destroy(&mctx); isc_app_finish();