]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add missing isc_mutex_destroy and isc_conditional_destroy calls.
authorWitold Kręcicki <wpk@isc.org>
Thu, 28 May 2020 10:34:37 +0000 (12:34 +0200)
committerOndřej Surý <ondrej@sury.org>
Sat, 30 May 2020 05:50:30 +0000 (07:50 +0200)
While harmless on Linux, missing isc_{mutex,conditional}_destroy
causes a memory leak on *BSD. Missing calls were added.

(cherry picked from commit a8807d9a7b25e14185d181abe1de12bf5d5a7af4)

bin/named/server.c
lib/isc/netmgr/netmgr.c
lib/isc/task.c

index 6149739cea8dfe356ccf2e858c352fa4028642d3..833fbc3840122578e615261c0a38a25e7ccf9591 100644 (file)
@@ -10087,6 +10087,7 @@ named_server_destroy(named_server_t **serverp) {
        dst_lib_destroy();
 
        isc_event_free(&server->reload_event);
+       isc_mutex_destroy(&server->reload_event_lock);
 
        INSIST(ISC_LIST_EMPTY(server->kasplist));
        INSIST(ISC_LIST_EMPTY(server->viewlist));
index 0c348d0c7422fc2138bca9312e5f9fad6e9d41eb..8310c0570a0b803908bc920317d9e6504a079be3 100644 (file)
@@ -276,6 +276,9 @@ nm_destroy(isc_nm_t **mgr0) {
 
                isc_queue_destroy(worker->ievents);
                isc_queue_destroy(worker->ievents_prio);
+               isc_mutex_destroy(&worker->lock);
+               isc_condition_destroy(&worker->cond);
+
                isc_mem_put(mgr->mctx, worker->recvbuf,
                            ISC_NETMGR_RECVBUF_SIZE);
                isc_thread_join(worker->thread, NULL);
@@ -771,6 +774,8 @@ nmsocket_cleanup(isc_nmsocket_t *sock, bool dofree) {
 
        isc_mem_free(sock->mgr->mctx, sock->ah_frees);
        isc_mem_free(sock->mgr->mctx, sock->ah_handles);
+       isc_mutex_destroy(&sock->lock);
+       isc_condition_destroy(&sock->cond);
 
        if (dofree) {
                isc_nm_t *mgr = sock->mgr;
index 5d9cef42ecba27a1c0bbbc7a4e780265634bb4b0..c0a51793751e7955f31000cf2e896b318353de6e 100644 (file)
@@ -1356,9 +1356,12 @@ static void
 manager_free(isc__taskmgr_t *manager) {
        for (unsigned int i = 0; i < manager->workers; i++) {
                isc_mutex_destroy(&manager->queues[i].lock);
+               isc_condition_destroy(&manager->queues[i].work_available);
        }
        isc_mutex_destroy(&manager->lock);
+       isc_mutex_destroy(&manager->excl_lock);
        isc_mutex_destroy(&manager->halt_lock);
+       isc_condition_destroy(&manager->halt_cond);
        isc_mem_put(manager->mctx, manager->queues,
                    manager->workers * sizeof(isc__taskqueue_t));
        manager->common.impmagic = 0;