aboutsummaryrefslogtreecommitdiff
path: root/zenutil/zenserverprocess.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-08-09 21:10:11 +0200
committerStefan Boberg <[email protected]>2021-08-09 21:10:11 +0200
commit8f05d82714650d200f353b466a6a8328a691a6f7 (patch)
treeb048031314560f29b7abe09c9050d2b9a4959bcd /zenutil/zenserverprocess.cpp
parentChanged logic so that the shutdown monitoring thread is spun up in non-test m... (diff)
downloadzen-8f05d82714650d200f353b466a6a8328a691a6f7.tar.xz
zen-8f05d82714650d200f353b466a6a8328a691a6f7.zip
Extended ZenServerInstance life cycle management
Diffstat (limited to 'zenutil/zenserverprocess.cpp')
-rw-r--r--zenutil/zenserverprocess.cpp41
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