]> git.ipfire.org Git - thirdparty/unbound.git/commitdiff
- Fix lock debug code for gcc sanitizer reports.
authorW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 10 Sep 2021 13:11:30 +0000 (15:11 +0200)
committerW.C.A. Wijngaards <wouter@nlnetlabs.nl>
Fri, 10 Sep 2021 13:11:30 +0000 (15:11 +0200)
daemon/daemon.c
daemon/unbound.c
dnstap/unbound-dnstap-socket.c
doc/Changelog
smallapp/unbound-checkconf.c
smallapp/unbound-control.c
testcode/lock_verify.c

index 08497c5edf808634206f5b59974b5f4d3d3250f4..0e3923b4e9f2cbd287515cdfbb5128fdbcc2650a 100644 (file)
@@ -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();
index 934a96c8068b0d8ad4b3808079092ed4afb594fd..457a08032857eb23fa260d13f8f0da80aa5a41e8 100644 (file)
@@ -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);
index 0fc74015e55b46da5148c5cc6b448bd06c8d218f..990b8a866af1212350e9b1a71a2489dbed68999e 100644 (file)
@@ -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) {
index e31dbfe03232ce20bcc98aefe4d5f298ec187809..0e56265632f1bd51594cc97cb10582ef5c5f0971 100644 (file)
@@ -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
index 5d1d6768455698408490353af7316366a1d4cf77..52c15238c652a4d388e2bfc0e29f39425e067238 100644 (file)
@@ -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")))
index a3df2579584395184b8df44712a68e3d1a1e95ed..c7c38276f006985cae14df342d5da034a59c1001 100644 (file)
@@ -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")))
index 666a7029d64d834c95944963ce69f122aeef5c68..b0cffe292ae170ba8b59b79e98e89886af1614bd 100644 (file)
@@ -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;
 }