Merge remote-tracking branch 'origin/topic/awelzel/3190-supervisor-eventmgr-shared-pipe-fix'

* origin/topic/awelzel/3190-supervisor-eventmgr-shared-pipe-fix:
  event: Reinitialize EventMgr's flare after fork() from stem

(cherry picked from commit 22fb445a7f)
This commit is contained in:
Arne Welzel 2023-10-24 19:35:20 +02:00 committed by Tim Wojtulewicz
parent 143f112a5c
commit 4d80668f1f
3 changed files with 17 additions and 0 deletions

View file

@ -207,4 +207,12 @@ void EventMgr::InitPostScript()
reporter->FatalError("Failed to register event manager FD with iosource_mgr");
}
void EventMgr::InitPostFork()
{
// Re-initialize the flare, closing and re-opening the underlying
// pipe FDs. This is needed so that each Zeek process in a supervisor
// setup has its own pipe instead of them all sharing a single pipe.
queue_flare = zeek::detail::Flare{};
}
} // namespace zeek

View file

@ -118,6 +118,9 @@ public:
const char* Tag() override { return "EventManager"; }
void InitPostScript();
// Initialization to be done after a fork() happened.
void InitPostFork();
uint64_t num_events_queued = 0;
uint64_t num_events_dispatched = 0;

View file

@ -554,8 +554,14 @@ SetupResult setup(int argc, char** argv, Options* zopts)
auto stem = Supervisor::CreateStem(options.supervisor_mode);
if ( Supervisor::ThisNode() )
{
// If we get here, we're a supervised node that just returned
// from CreateStem() after being forked from the stem.
Supervisor::ThisNode()->Init(&options);
event_mgr.InitPostFork();
}
script_coverage_mgr.ReadStats();
auto dns_type = options.dns_mode;