From: Stephan Bosch Date: Wed, 4 Apr 2018 01:02:24 +0000 (+0200) Subject: lib-http: test-http-payload - Implement reference counting for client request. X-Git-Tag: 2.3.14.rc1~290 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e3b315513138ae8c080c718d99da6fc3504dca2e;p=thirdparty%2Fdovecot%2Fcore.git lib-http: test-http-payload - Implement reference counting for client request. --- diff --git a/src/lib-http/test-http-payload.c b/src/lib-http/test-http-payload.c index 06c91bea00..d7278cd58c 100644 --- a/src/lib-http/test-http-payload.c +++ b/src/lib-http/test-http-payload.c @@ -876,6 +876,8 @@ static void test_server_deinit(void) */ struct test_client_request { + int refcount; + struct test_client_request *prev, *next; struct http_client_request *hreq; @@ -895,13 +897,27 @@ static struct test_client_request *test_client_request_new(void) struct test_client_request *tcreq; tcreq = i_new(struct test_client_request, 1); + tcreq->refcount = 1; DLLIST_PREPEND(&client_requests, tcreq); return tcreq; } -static void test_client_request_destroy(struct test_client_request *tcreq) +static void test_client_request_ref(struct test_client_request *tcreq) { + tcreq->refcount++; +} + +static void test_client_request_unref(struct test_client_request **_tcreq) +{ + struct test_client_request *tcreq = *_tcreq; + + *_tcreq = NULL; + + i_assert(tcreq->refcount > 0); + if (--tcreq->refcount > 0) + return; + io_remove(&tcreq->io); i_stream_unref(&tcreq->payload); i_stream_unref(&tcreq->file_in); @@ -910,6 +926,11 @@ static void test_client_request_destroy(struct test_client_request *tcreq) i_free(tcreq); } +static void test_client_request_destroy(struct test_client_request *tcreq) +{ + test_client_request_unref(&tcreq); +} + static void test_client_switch_ioloop(void) { struct test_client_request *tcreq;