Add trigger_mgr to iosource_mgr later during startup

This fixes a potential crash due to trigger_mgr getting shutdown earlier
than dns_mgr, and dns_mgr then trying to use it after it's been deleted.
This change forces the order of initialization/destruction in
iosource_mgr to cause dns_mgr to be deleted first.
This commit is contained in:
Tim Wojtulewicz 2023-03-06 13:12:45 -07:00
parent 117d25dcd8
commit b26f4a83b3
3 changed files with 8 additions and 3 deletions

View file

@ -504,7 +504,6 @@ void Trigger::Modified(notifier::detail::Modifiable* m)
Manager::Manager() : iosource::IOSource() Manager::Manager() : iosource::IOSource()
{ {
pending = new TriggerList(); pending = new TriggerList();
iosource_mgr->Register(this, true);
} }
Manager::~Manager() Manager::~Manager()
@ -512,6 +511,11 @@ Manager::~Manager()
delete pending; delete pending;
} }
void Manager::InitPostScript()
{
iosource_mgr->Register(this, true);
}
double Manager::GetNextTimeout() double Manager::GetNextTimeout()
{ {
return pending->empty() ? -1 : run_state::network_time + 0.100; return pending->empty() ? -1 : run_state::network_time + 0.100;

View file

@ -162,6 +162,8 @@ public:
Manager(); Manager();
~Manager(); ~Manager();
void InitPostScript();
double GetNextTimeout() override; double GetNextTimeout() override;
void Process() override; void Process() override;
const char* Tag() override { return "TriggerMgr"; } const char* Tag() override { return "TriggerMgr"; }

View file

@ -884,8 +884,7 @@ SetupResult setup(int argc, char** argv, Options* zopts)
analyzer_mgr->InitPostScript(); analyzer_mgr->InitPostScript();
file_mgr->InitPostScript(); file_mgr->InitPostScript();
dns_mgr->InitPostScript(); dns_mgr->InitPostScript();
trigger_mgr->InitPostScript();
// dns_mgr->LookupAddr("17.253.144.10");
#ifdef USE_PERFTOOLS_DEBUG #ifdef USE_PERFTOOLS_DEBUG
} }