]> granicus.if.org Git - libevent/commitdiff
Fix several memory leaks in the unit tests.
authorNick Mathewson <nickm@torproject.org>
Thu, 18 Sep 2014 16:40:38 +0000 (12:40 -0400)
committerNick Mathewson <nickm@torproject.org>
Thu, 18 Sep 2014 16:40:38 +0000 (12:40 -0400)
Also add a comment to buffer.c about why we call
evbuffer_file_segment_free on failure to add the segment.

buffer.c
test/regress.c
test/regress_buffer.c
test/regress_dns.c
test/regress_http.c
test/regress_ssl.c
test/regress_thread.c

index d76e649e7d386d46b747c542aa2c6d1792b5968e..f5a5210453481ab23daf4a6567f5762438e7e4d6 100644 (file)
--- a/buffer.c
+++ b/buffer.c
@@ -3203,7 +3203,7 @@ evbuffer_add_file_segment(struct evbuffer *buf,
        return 0;
 err:
        EVBUFFER_UNLOCK(buf);
-       evbuffer_file_segment_free(seg);
+       evbuffer_file_segment_free(seg); /* Lowers the refcount */
        return -1;
 }
 
index 0438a9d3b9f114501d1d7aa14221d265f9a8e294..399ba2fbd8d7953025882865d744f1b8d479715e 100644 (file)
@@ -1673,7 +1673,7 @@ static void
 test_active_later(void *ptr)
 {
        struct basic_test_data *data = ptr;
-       struct event *ev1, *ev2;
+       struct event *ev1 = NULL, *ev2 = NULL;
        struct event ev3, ev4;
        struct timeval qsec = {0, 100000};
        ev1 = event_new(data->base, data->pair[0], EV_READ|EV_PERSIST, read_and_drain_cb, NULL);
@@ -1708,10 +1708,15 @@ test_active_later(void *ptr)
         * it. */
        event_active_later_(&ev3, EV_READ);
        event_base_assert_ok_(data->base);
+
+end:
+       if (ev1)
+               event_free(ev1);
+       if (ev2)
+               event_free(ev2);
+
        event_base_free(data->base);
        data->base = NULL;
-end:
-       ;
 }
 
 
index c1f337bf6fd0cc2641272027b67b9b3b23a44575..aa1cd2a78307f923cb66da0217fce268c6f5fc76 100644 (file)
@@ -819,7 +819,6 @@ test_evbuffer_add_file(void *ptr)
        if (use_segment) {
                tt_assert(evbuffer_add_file_segment(src, seg,
                        segment_offset, segment_len)!=-1);
-               seg = NULL; /* Avoid double-free */
        } else {
                tt_assert(evbuffer_add_file(src, fd, starting_offset,
                        mapping_len) != -1);
@@ -864,6 +863,10 @@ test_evbuffer_add_file(void *ptr)
                evutil_closesocket(pair[0]);
        if (pair[1] >= 0)
                evutil_closesocket(pair[1]);
+       if (wev)
+               event_free(wev);
+       if (rev)
+               event_free(rev);
        if (tmpfilename) {
                unlink(tmpfilename);
                free(tmpfilename);
index 91db1531ab461e636b4a6f8630efb1a68d05fb81..bf7e76e589277e8bc6900f6b3b30c23336df0d5e 100644 (file)
@@ -870,8 +870,12 @@ dns_inflight_test_impl(void *arg, int flags)
 end:
        if (dns)
                evdns_base_free(dns, 0);
-       if (exit_port)
+       if (exit_port) {
                evdns_close_server_port(exit_port);
+               exit_port = NULL;
+       } else if (! disable_when_inactive) {
+               evdns_close_server_port(dns_port);
+       }
 }
 
 static void
@@ -1861,6 +1865,7 @@ dbg_leak_resume(void *env_, int cancel, int send_err_shutdown)
 end:
        evdns_base_free(env->dns_base, send_err_shutdown);
        env->dns_base = 0;
+
        event_base_free(env->base);
        env->base = 0;
 }
index 7c8337a356b5641a27147f7ecc3d1bad2ed84ca5..d62dfbbf19b9b908a026e21029b9c3c4cf6ab1a4 100644 (file)
@@ -399,7 +399,7 @@ http_basic_test(void *arg)
 {
        struct basic_test_data *data = arg;
        struct timeval tv;
-       struct bufferevent *bev;
+       struct bufferevent *bev = NULL;
        evutil_socket_t fd;
        const char *http_request;
        ev_uint16_t port = 0, port2 = 0;
@@ -484,7 +484,8 @@ http_basic_test(void *arg)
 
        evhttp_free(http);
  end:
-       ;
+       if (bev)
+               bufferevent_free(bev);
 }
 
 
index c2113414cc63957ba2d4278069cd4c5118d33ffb..bf9b46b1ef88ee3cb0917f1bec1571837821fe3b 100644 (file)
@@ -194,6 +194,7 @@ respond_to_number(struct bufferevent *bev, void *ctx)
        n = atoi(line);
        if (n <= 0)
                TT_FAIL(("Bad number: %s", line));
+       free(line);
        TT_BLATHER(("The number was %d", n));
        if (n == 1001) {
                ++test_is_done;
index 612bf1d6111fafdeb0be04597e7f5890a833f8e4..131d6def75182fd5edad253524131b72ab79d2ef 100644 (file)
@@ -382,7 +382,8 @@ thread_conditions_simple(void *arg)
        tt_int_op(n_signal, ==, 1);
 
 end:
-       ;
+       EVTHREAD_FREE_LOCK(cond.lock, EVTHREAD_LOCKTYPE_RECURSIVE);
+       EVTHREAD_FREE_COND(cond.cond);
 }
 
 #define CB_COUNT 128