diff options
| author | Stefan Boberg <[email protected]> | 2021-08-09 21:10:11 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-08-09 21:10:11 +0200 |
| commit | 8f05d82714650d200f353b466a6a8328a691a6f7 (patch) | |
| tree | b048031314560f29b7abe09c9050d2b9a4959bcd /zenutil/zenserverprocess.cpp | |
| parent | Changed logic so that the shutdown monitoring thread is spun up in non-test m... (diff) | |
| download | zen-8f05d82714650d200f353b466a6a8328a691a6f7.tar.xz zen-8f05d82714650d200f353b466a6a8328a691a6f7.zip | |
Extended ZenServerInstance life cycle management
Diffstat (limited to 'zenutil/zenserverprocess.cpp')
| -rw-r--r-- | zenutil/zenserverprocess.cpp | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/zenutil/zenserverprocess.cpp b/zenutil/zenserverprocess.cpp index 73b8d01f1..112c10dff 100644 --- a/zenutil/zenserverprocess.cpp +++ b/zenutil/zenserverprocess.cpp @@ -17,7 +17,6 @@ ////////////////////////////////////////////////////////////////////////// namespace zenutil { - class SecurityAttributes { public: @@ -197,7 +196,8 @@ ZenServerState::Register(int ListenPort) m_OurEntry = &Entry; - Entry.Pid = Pid; + Entry.Pid = Pid; + Entry.Flags = 0; return &Entry; } @@ -255,6 +255,13 @@ ZenServerState::ZenServerEntry::Reset() { Pid = 0; ListenPort = 0; + Flags = 0; +} + +void +ZenServerState::ZenServerEntry::SignalShutdownRequest() +{ + Flags |= uint16_t(FlagsEnum::kShutdownPlease); } ////////////////////////////////////////////////////////////////////////// @@ -331,6 +338,18 @@ ZenServerInstance::ZenServerInstance(ZenServerEnvironment& TestEnvironment) : m_ ZenServerInstance::~ZenServerInstance() { + Shutdown(); +} + +void +ZenServerInstance::SignalShutdown() +{ + m_ShutdownEvent.Set(); +} + +void +ZenServerInstance::Shutdown() +{ if (m_Process.IsValid()) { if (m_Terminate) @@ -342,6 +361,7 @@ ZenServerInstance::~ZenServerInstance() { SignalShutdown(); m_Process.Wait(); + m_Process.Reset(); } } } @@ -361,10 +381,7 @@ ZenServerInstance::SpawnServer(int BasePort) ChildEventName << "Zen_Child_" << ChildId; zen::NamedEvent ChildEvent{ChildEventName}; - zen::ExtendableStringBuilder<32> ChildShutdownEventName; - ChildShutdownEventName << "Zen_" << BasePort; - ChildShutdownEventName << "_Shutdown"; - zen::NamedEvent ChildShutdownEvent{ChildShutdownEventName}; + CreateShutdownEvent(BasePort); zen::ExtendableStringBuilder<32> LogId; LogId << "Zen" << ChildId; @@ -480,7 +497,6 @@ ZenServerInstance::SpawnServer(int BasePort) if (IsTest) { m_Process.Initialize(hProcess); - m_ShutdownEvent = std::move(ChildShutdownEvent); } else { @@ -491,6 +507,16 @@ ZenServerInstance::SpawnServer(int BasePort) } void +ZenServerInstance::CreateShutdownEvent(int BasePort) +{ + zen::ExtendableStringBuilder<32> ChildShutdownEventName; + ChildShutdownEventName << "Zen_" << BasePort; + ChildShutdownEventName << "_Shutdown"; + zen::NamedEvent ChildShutdownEvent{ChildShutdownEventName}; + m_ShutdownEvent = std::move(ChildShutdownEvent); +} + +void ZenServerInstance::AttachToRunningServer(int BasePort) { ZenServerState State; @@ -518,6 +544,7 @@ ZenServerInstance::AttachToRunningServer(int BasePort) } m_Process.Initialize(Entry->Pid); + CreateShutdownEvent(BasePort); } void |