summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorAzat Khuzhin <azat@libevent.org>2020-07-05 11:59:32 +0300
committerAzat Khuzhin <azat@libevent.org>2020-07-05 12:16:52 +0300
commit90bcf2d660b9b43cb8e747421d4938f08f935bd7 (patch)
treed3c40d326d5138c575a83daea7da3256c6e40d69 /test
parentba19b356bf8a9be2a5bddfa264dee61ffc9573a7 (diff)
downloadlibevent-90bcf2d660b9b43cb8e747421d4938f08f935bd7.tar.gz
test: fix leak in dns/getaddrinfo_cancel_stress
Some requests may get response (evutil_addrinfo) from gaic_server_cb, in case of cancel_event (10000ms) will not be fast enough.
Diffstat (limited to 'test')
-rw-r--r--test/regress_dns.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/test/regress_dns.c b/test/regress_dns.c
index c19604a5..abad1b47 100644
--- a/test/regress_dns.c
+++ b/test/regress_dns.c
@@ -1866,7 +1866,8 @@ struct gaic_request_status {
#define GAIC_MAGIC 0x1234abcd
-static int pending = 0;
+static int gaic_pending = 0;
+static int gaic_freed = 0;
static void
gaic_cancel_request_cb(evutil_socket_t fd, short what, void *arg)
@@ -1911,7 +1912,13 @@ gaic_getaddrinfo_cb(int result, struct evutil_addrinfo *res, void *arg)
free(status);
end:
- if (--pending <= 0)
+ if (res)
+ {
+ TT_BLATHER(("evutil_freeaddrinfo(%p)", res));
+ evutil_freeaddrinfo(res);
+ ++gaic_freed;
+ }
+ if (--gaic_pending <= 0)
event_base_loopexit(base, NULL);
}
@@ -1929,7 +1936,7 @@ gaic_launch(struct event_base *base, struct evdns_base *dns_base)
"foobar.bazquux.example.com", "80", NULL, gaic_getaddrinfo_cb,
status);
event_add(&status->cancel_event, &tv);
- ++pending;
+ ++gaic_pending;
}
#ifdef EVENT_SET_MEM_FUNCTIONS_IMPLEMENTED
@@ -2152,6 +2159,9 @@ test_getaddrinfo_async_cancel_stress(void *ptr)
event_base_dispatch(base);
+ // at least some was canceled via external event
+ tt_int_op(gaic_freed, !=, 1000);
+
end:
if (dns_base)
evdns_base_free(dns_base, 1);