From 63ea6d8bc676b0ede35fe44b36b6586c8ec5c8c2 Mon Sep 17 00:00:00 2001 From: Martin Pulec Date: Wed, 7 Jun 2017 15:06:40 +0200 Subject: [PATCH] Messaging: fixed a leak --- src/messaging.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/messaging.cpp b/src/messaging.cpp index 87309264e..394198fef 100644 --- a/src/messaging.cpp +++ b/src/messaging.cpp @@ -29,6 +29,9 @@ struct response { namespace { struct responder { responder() : received_response(nullptr) {} + ~responder() { + free_response(received_response); + } static void receive_response(void *s, struct response *r) { (*((shared_ptr *) s))->receive_response_real(r); } @@ -113,7 +116,9 @@ static struct response *send_message_common(struct module *root, const char *con unique_lock lk(responder->lock); responder->cv.wait_for(lk, std::chrono::milliseconds(timeout_ms), [responder]{return responder->received_response != NULL;}); if (responder->received_response) { - return responder->received_response; + struct response *resp = responder->received_response; + responder->received_response = NULL; + return resp; } else { return new_response(RESPONSE_ACCEPTED, NULL); } @@ -149,7 +154,9 @@ static struct response *send_message_common(struct module *root, const char *con unique_lock lk(responder->lock); responder->cv.wait_for(lk, std::chrono::milliseconds(timeout_ms), [responder]{return responder->received_response != NULL;}); if (responder->received_response) { - return responder->received_response; + struct response *resp = responder->received_response; + responder->received_response = NULL; + return resp; } else { return new_response(RESPONSE_ACCEPTED, NULL); }