Fix a memory leak in signal event handling. libevent's API is an ownership disaster.

This commit is contained in:
Ian Gulliver
2015-02-08 19:13:00 +00:00
parent 719a8ab1d8
commit 9a0449be5d
2 changed files with 4 additions and 2 deletions

View File

@@ -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_);
}

View File

@@ -105,6 +105,7 @@ class CryptoPubServer : public CryptoBase {
struct event_base* event_base_;
struct evconnlistener* listener_;
struct event* sigevent_;
const SecretKey& secret_key_;
};