summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/Activator.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/Activator.h')
-rw-r--r--cpp/src/IceGrid/Activator.h33
1 files changed, 20 insertions, 13 deletions
diff --git a/cpp/src/IceGrid/Activator.h b/cpp/src/IceGrid/Activator.h
index 8e45f6c1209..5251e8ab91d 100644
--- a/cpp/src/IceGrid/Activator.h
+++ b/cpp/src/IceGrid/Activator.h
@@ -32,6 +32,21 @@ class Activator : public IceUtil::Monitor< IceUtil::Mutex>, public IceUtil::Shar
{
public:
+ struct Process
+ {
+#ifdef _WIN32
+ Activator* activator;
+ DWORD pid;
+ HANDLE hnd;
+ HANDLE waithnd;
+#else
+ pid_t pid;
+ int pipeFd;
+ std::string msg;
+#endif
+ ServerIPtr server;
+ };
+
Activator(const TraceLevelsPtr&);
virtual ~Activator();
@@ -56,6 +71,10 @@ public:
void sendSignal(const std::string&, int);
void runTerminationListener();
+#ifdef _WIN32
+ void processTerminated(Process*);
+#endif
+
private:
void terminationListener();
@@ -66,25 +85,13 @@ private:
int waitPid(pid_t);
#endif
- struct Process
- {
-#ifdef _WIN32
- DWORD pid;
- HANDLE hnd;
-#else
- pid_t pid;
- int pipeFd;
- std::string msg;
-#endif
- ServerIPtr server;
- };
-
TraceLevelsPtr _traceLevels;
std::map<std::string, Process> _processes;
bool _deactivating;
#ifdef _WIN32
HANDLE _hIntr;
+ std::vector<Process*> _terminated;
#else
int _fdIntrRead;
int _fdIntrWrite;