]> git.ipfire.org Git - thirdparty/knot-resolver.git/commitdiff
daemon: fixed socket mempool cleanup on exit
authorMarek Vavrusa <marek@vavrusa.com>
Fri, 27 May 2016 05:52:39 +0000 (22:52 -0700)
committerMarek Vavrusa <marek@vavrusa.com>
Fri, 27 May 2016 05:52:39 +0000 (22:52 -0700)
fixes #73 small leak in cleaning up per-socket
mempool on daemon exit

daemon/io.c
daemon/network.c

index ae079140f9396ec345e736ed4d4032eb26f702d3..c2df007a73475f083ab044f06725c234b08e396d 100644 (file)
@@ -54,8 +54,10 @@ static void session_clear(struct session *s)
 
 void session_free(struct session *s)
 {
-       session_clear(s);
-       free(s);
+       if (s) {
+               session_clear(s);
+               free(s);
+       }
 }
 
 struct session *session_new(void)
index 26bd72fd8235f988b83e7f1a06c5d68ad31b2273..78dab48ecf41ec25b9ef7f15c7f61a60914af7e9 100644 (file)
@@ -50,11 +50,6 @@ void network_init(struct network *net, uv_loop_t *loop)
        }
 }
 
-static void free_handle(uv_handle_t *handle)
-{
-       free(handle);
-}
-
 static void close_handle(uv_handle_t *handle, bool force)
 {
        if (force) { /* Force close if event loop isn't running. */
@@ -62,9 +57,10 @@ static void close_handle(uv_handle_t *handle, bool force)
                if (uv_fileno(handle, &fd) == 0) {
                        close(fd);
                }
-               free_handle(handle);
+               handle->loop = NULL;
+               io_free(handle);
        } else { /* Asynchronous close */
-               uv_close(handle, free_handle);
+               uv_close(handle, io_free);
        }
 }