mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-02-06 04:04:32 +00:00
Merge #7637: Fix memleak in TorController [rework]
e219503 Fix memleak in TorController [rework] (Wladimir J. van der Laan)
This commit is contained in:
commit
3da5d1bc2e
@ -398,6 +398,9 @@ TorController::TorController(struct event_base* base, const std::string& target)
|
|||||||
target(target), conn(base), reconnect(true), reconnect_ev(0),
|
target(target), conn(base), reconnect(true), reconnect_ev(0),
|
||||||
reconnect_timeout(RECONNECT_TIMEOUT_START)
|
reconnect_timeout(RECONNECT_TIMEOUT_START)
|
||||||
{
|
{
|
||||||
|
reconnect_ev = event_new(base, -1, 0, reconnect_cb, this);
|
||||||
|
if (!reconnect_ev)
|
||||||
|
LogPrintf("tor: Failed to create event for reconnection: out of memory?\n");
|
||||||
// Start connection attempts immediately
|
// Start connection attempts immediately
|
||||||
if (!conn.Connect(target, boost::bind(&TorController::connected_cb, this, _1),
|
if (!conn.Connect(target, boost::bind(&TorController::connected_cb, this, _1),
|
||||||
boost::bind(&TorController::disconnected_cb, this, _1) )) {
|
boost::bind(&TorController::disconnected_cb, this, _1) )) {
|
||||||
@ -413,8 +416,10 @@ TorController::TorController(struct event_base* base, const std::string& target)
|
|||||||
|
|
||||||
TorController::~TorController()
|
TorController::~TorController()
|
||||||
{
|
{
|
||||||
if (reconnect_ev)
|
if (reconnect_ev) {
|
||||||
event_del(reconnect_ev);
|
event_free(reconnect_ev);
|
||||||
|
reconnect_ev = 0;
|
||||||
|
}
|
||||||
if (service.IsValid()) {
|
if (service.IsValid()) {
|
||||||
RemoveLocal(service);
|
RemoveLocal(service);
|
||||||
}
|
}
|
||||||
@ -626,8 +631,8 @@ void TorController::disconnected_cb(TorControlConnection& conn)
|
|||||||
|
|
||||||
// Single-shot timer for reconnect. Use exponential backoff.
|
// Single-shot timer for reconnect. Use exponential backoff.
|
||||||
struct timeval time = MillisToTimeval(int64_t(reconnect_timeout * 1000.0));
|
struct timeval time = MillisToTimeval(int64_t(reconnect_timeout * 1000.0));
|
||||||
reconnect_ev = event_new(base, -1, 0, reconnect_cb, this);
|
if (reconnect_ev)
|
||||||
event_add(reconnect_ev, &time);
|
event_add(reconnect_ev, &time);
|
||||||
reconnect_timeout *= RECONNECT_TIMEOUT_EXP;
|
reconnect_timeout *= RECONNECT_TIMEOUT_EXP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user