Fix a memory leak in signal event handling. libevent's API is an ownership disaster.
This commit is contained in:
@@ -272,8 +272,8 @@ void CryptoPubConnBase::OnReadable() {
|
|||||||
CryptoPubServer::CryptoPubServer(const SecretKey& secret_key)
|
CryptoPubServer::CryptoPubServer(const SecretKey& secret_key)
|
||||||
: secret_key_(secret_key),
|
: secret_key_(secret_key),
|
||||||
event_base_(event_base_new()) {
|
event_base_(event_base_new()) {
|
||||||
auto signal_event = evsignal_new(event_base_, SIGINT, &CryptoPubServer::Shutdown_, this);
|
sigevent_ = evsignal_new(event_base_, SIGINT, &CryptoPubServer::Shutdown_, this);
|
||||||
event_add(signal_event, NULL);
|
event_add(sigevent_, NULL);
|
||||||
|
|
||||||
struct sockaddr_in6 server_addr = {0};
|
struct sockaddr_in6 server_addr = {0};
|
||||||
server_addr.sin6_family = AF_INET6;
|
server_addr.sin6_family = AF_INET6;
|
||||||
@@ -284,6 +284,7 @@ CryptoPubServer::CryptoPubServer(const SecretKey& secret_key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
CryptoPubServer::~CryptoPubServer() {
|
CryptoPubServer::~CryptoPubServer() {
|
||||||
|
event_free(sigevent_);
|
||||||
evconnlistener_free(listener_);
|
evconnlistener_free(listener_);
|
||||||
event_base_free(event_base_);
|
event_base_free(event_base_);
|
||||||
}
|
}
|
||||||
|
|||||||
1
crypto.h
1
crypto.h
@@ -105,6 +105,7 @@ class CryptoPubServer : public CryptoBase {
|
|||||||
|
|
||||||
struct event_base* event_base_;
|
struct event_base* event_base_;
|
||||||
struct evconnlistener* listener_;
|
struct evconnlistener* listener_;
|
||||||
|
struct event* sigevent_;
|
||||||
|
|
||||||
const SecretKey& secret_key_;
|
const SecretKey& secret_key_;
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user