From 9a0449be5d17f3cae2080cfc1fdc2267e77629d6 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sun, 8 Feb 2015 19:13:00 +0000 Subject: [PATCH] Fix a memory leak in signal event handling. libevent's API is an ownership disaster. --- crypto.cc | 5 +++-- crypto.h | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/crypto.cc b/crypto.cc index 0c99667..e2b3062 100644 --- a/crypto.cc +++ b/crypto.cc @@ -272,8 +272,8 @@ void CryptoPubConnBase::OnReadable() { CryptoPubServer::CryptoPubServer(const SecretKey& secret_key) : secret_key_(secret_key), event_base_(event_base_new()) { - auto signal_event = evsignal_new(event_base_, SIGINT, &CryptoPubServer::Shutdown_, this); - event_add(signal_event, NULL); + sigevent_ = evsignal_new(event_base_, SIGINT, &CryptoPubServer::Shutdown_, this); + event_add(sigevent_, NULL); struct sockaddr_in6 server_addr = {0}; server_addr.sin6_family = AF_INET6; @@ -284,6 +284,7 @@ CryptoPubServer::CryptoPubServer(const SecretKey& secret_key) } CryptoPubServer::~CryptoPubServer() { + event_free(sigevent_); evconnlistener_free(listener_); event_base_free(event_base_); } diff --git a/crypto.h b/crypto.h index a88d38d..8adc5cc 100644 --- a/crypto.h +++ b/crypto.h @@ -105,6 +105,7 @@ class CryptoPubServer : public CryptoBase { struct event_base* event_base_; struct evconnlistener* listener_; + struct event* sigevent_; const SecretKey& secret_key_; };