From 4015af02d8bcce34435001bf69892bd3a209a877 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Thu, 4 Mar 2021 17:22:01 +1100 Subject: [PATCH] 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 --- bin/tools/mdig.c | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/bin/tools/mdig.c b/bin/tools/mdig.c index 884075b9cf..d48b3e995b 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();