From 8f05d82714650d200f353b466a6a8328a691a6f7 Mon Sep 17 00:00:00 2001 From: Stefan Boberg Date: Mon, 9 Aug 2021 21:10:11 +0200 Subject: Extended ZenServerInstance life cycle management --- zenutil/zenserverprocess.cpp | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) (limited to 'zenutil/zenserverprocess.cpp') 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); } ////////////////////////////////////////////////////////////////////////// @@ -330,6 +337,18 @@ ZenServerInstance::ZenServerInstance(ZenServerEnvironment& TestEnvironment) : m_ } ZenServerInstance::~ZenServerInstance() +{ + Shutdown(); +} + +void +ZenServerInstance::SignalShutdown() +{ + m_ShutdownEvent.Set(); +} + +void +ZenServerInstance::Shutdown() { if (m_Process.IsValid()) { @@ -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 { @@ -490,6 +506,16 @@ ZenServerInstance::SpawnServer(int BasePort) m_ReadyEvent = std::move(ChildEvent); } +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) { @@ -518,6 +544,7 @@ ZenServerInstance::AttachToRunningServer(int BasePort) } m_Process.Initialize(Entry->Pid); + CreateShutdownEvent(BasePort); } void -- cgit v1.2.3