Remove presumed ownership of HeartbeatTimer

threading::Manager is currently never deleted, but if that ever changes,
deleting the stored HeartbeatTimer pointer would be a double-free
since TimerMgr owns it.
This commit is contained in:
Jon Siwek 2020-02-05 17:50:56 -08:00
parent e62c0e0c9f
commit 7f76381f13
4 changed files with 21 additions and 8 deletions

16
CHANGES
View file

@ -1,4 +1,20 @@
3.1.0-dev.551 | 2020-02-05 17:50:56 -0800
* Remove presumed ownership of HeartbeatTimer (Jon Siwek, Corelight)
threading::Manager is currently never deleted, but if that ever changes,
deleting the stored HeartbeatTimer pointer would be a double-free
since TimerMgr owns it.
* Set threading::Manager terminating state (Jon Siwek, Corelight)
Coverity CID 1417429
* Remove unused HeartbeatTimer member: do_expire (Jon Siwek, Corelight)
Coverity CID 1417434
3.1.0-dev.548 | 2020-02-05 14:57:08 -0800 3.1.0-dev.548 | 2020-02-05 14:57:08 -0800
* GH-773: Make EventMgr an IOSource so that events interrupt kevent waits (Tim Wojtulewicz, Corelight) * GH-773: Make EventMgr an IOSource so that events interrupt kevent waits (Tim Wojtulewicz, Corelight)

View file

@ -1 +1 @@
3.1.0-dev.548 3.1.0-dev.551

View file

@ -30,9 +30,6 @@ Manager::~Manager()
{ {
if ( all_threads.size() ) if ( all_threads.size() )
Terminate(); Terminate();
if ( heartbeat_timer )
delete heartbeat_timer;
} }
void Manager::Terminate() void Manager::Terminate()
@ -68,7 +65,7 @@ void Manager::AddThread(BasicThread* thread)
DBG_LOG(DBG_THREADING, "Adding thread %s ...", thread->Name()); DBG_LOG(DBG_THREADING, "Adding thread %s ...", thread->Name());
all_threads.push_back(thread); all_threads.push_back(thread);
if ( ! heartbeat_timer ) if ( ! heartbeat_timer_running )
StartHeartbeatTimer(); StartHeartbeatTimer();
} }
@ -127,8 +124,8 @@ void Manager::SendHeartbeats()
void Manager::StartHeartbeatTimer() void Manager::StartHeartbeatTimer()
{ {
heartbeat_timer = new HeartbeatTimer(network_time + BifConst::Threading::heartbeat_interval); heartbeat_timer_running = true;
timer_mgr->Add(heartbeat_timer); timer_mgr->Add(new HeartbeatTimer(network_time + BifConst::Threading::heartbeat_interval));
} }
void Manager::Flush() void Manager::Flush()

View file

@ -136,7 +136,7 @@ private:
msg_stats_list stats; msg_stats_list stats;
HeartbeatTimer* heartbeat_timer = nullptr; bool heartbeat_timer_running = false;
}; };
} }