From: W.C.A. Wijngaards Date: Fri, 10 Sep 2021 13:11:30 +0000 (+0200) Subject: - Fix lock debug code for gcc sanitizer reports. X-Git-Tag: release-1.14.0rc1~46 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a64cbe958dacb2cafe2800587fd76154371a464b;p=thirdparty%2Funbound.git - Fix lock debug code for gcc sanitizer reports. --- diff --git a/daemon/daemon.c b/daemon/daemon.c index 08497c5ed..0e3923b4e 100644 --- a/daemon/daemon.c +++ b/daemon/daemon.c @@ -210,7 +210,6 @@ daemon_init(void) } #endif /* USE_WINSOCK */ signal_handling_record(); - checklock_start(); #ifdef HAVE_SSL # ifdef HAVE_ERR_LOAD_CRYPTO_STRINGS ERR_load_crypto_strings(); diff --git a/daemon/unbound.c b/daemon/unbound.c index 934a96c80..457a08032 100644 --- a/daemon/unbound.c +++ b/daemon/unbound.c @@ -781,6 +781,7 @@ main(int argc, char* argv[]) int cmdline_cfg = 0; #endif + checklock_start(); log_init(NULL, 0, NULL); log_ident_default = strrchr(argv[0],'/')?strrchr(argv[0],'/')+1:argv[0]; log_ident_set_default(log_ident_default); diff --git a/dnstap/unbound-dnstap-socket.c b/dnstap/unbound-dnstap-socket.c index 0fc74015e..990b8a866 100644 --- a/dnstap/unbound-dnstap-socket.c +++ b/dnstap/unbound-dnstap-socket.c @@ -1264,9 +1264,9 @@ int main(int argc, char** argv) memset(&tls_list, 0, sizeof(tls_list)); /* lock debug start (if any) */ + checklock_start(); log_ident_set("unbound-dnstap-socket"); log_init(0, 0, 0); - checklock_start(); #ifdef SIGPIPE if(signal(SIGPIPE, SIG_IGN) == SIG_ERR) { diff --git a/doc/Changelog b/doc/Changelog index e31dbfe03..0e5626563 100644 --- a/doc/Changelog +++ b/doc/Changelog @@ -1,5 +1,6 @@ 10 September 2021: Wouter - Fix initialisation errors reported by gcc sanitizer. + - Fix lock debug code for gcc sanitizer reports. 8 September 2021: Wouter - Merged #41 from Moritz Schneider: made outbound-msg-retry diff --git a/smallapp/unbound-checkconf.c b/smallapp/unbound-checkconf.c index 5d1d67684..52c15238c 100644 --- a/smallapp/unbound-checkconf.c +++ b/smallapp/unbound-checkconf.c @@ -909,9 +909,9 @@ int main(int argc, char* argv[]) const char* f; const char* opt = NULL; const char* cfgfile = CONFIGFILE; + checklock_start(); log_ident_set("unbound-checkconf"); log_init(NULL, 0, NULL); - checklock_start(); #ifdef USE_WINSOCK /* use registry config file in preference to compiletime location */ if(!(cfgfile=w_lookup_reg_str("Software\\Unbound", "ConfigFile"))) diff --git a/smallapp/unbound-control.c b/smallapp/unbound-control.c index a3df25795..c7c38276f 100644 --- a/smallapp/unbound-control.c +++ b/smallapp/unbound-control.c @@ -944,9 +944,9 @@ int main(int argc, char* argv[]) extern int check_locking_order; check_locking_order = 0; #endif /* USE_THREAD_DEBUG */ + checklock_start(); log_ident_set("unbound-control"); log_init(NULL, 0, NULL); - checklock_start(); #ifdef USE_WINSOCK /* use registry config file in preference to compiletime location */ if(!(cfgfile=w_lookup_reg_str("Software\\Unbound", "ConfigFile"))) diff --git a/testcode/lock_verify.c b/testcode/lock_verify.c index 666a7029d..b0cffe292 100644 --- a/testcode/lock_verify.c +++ b/testcode/lock_verify.c @@ -387,6 +387,37 @@ static void check_order(rbtree_type* all_locks) fprintf(stderr, "\n"); } +/** delete lock ref */ +static void dellockref(rbnode_type* node, void* ATTR_UNUSED(arg)) +{ + struct lock_ref* o = (struct lock_ref*)node; + if(!o) return; + free(o->file); + free(o); +} + +/** delete lock node */ +static void delnode(rbnode_type* node, void* ATTR_UNUSED(arg)) +{ + struct order_lock* o = (struct order_lock*)node; + if(!o) return; + free(o->create_file); + if(o->smaller) { + traverse_postorder(o->smaller, &dellockref, NULL); + free(o->smaller); + } + free(o); +} + +/** delete allocated memory */ +static void locks_free(rbtree_type* all_locks) +{ + if(!all_locks) + return; + traverse_postorder(all_locks, &delnode, NULL); + free(all_locks); +} + /** main program to verify all traces passed */ int main(int argc, char* argv[]) @@ -403,6 +434,7 @@ main(int argc, char* argv[]) usage(); return 1; } + checklock_start(); log_init(NULL, 0, NULL); log_ident_set("lock-verify"); /* init */ @@ -421,6 +453,7 @@ main(int argc, char* argv[]) printf("checked %d locks in %d seconds with %d errors.\n", (int)all_locks->count, (int)(time(NULL)-starttime), errors_detected); + locks_free(all_locks); if(errors_detected) return 1; return 0; }