summaryrefslogtreecommitdiff
path: root/cpp/src/IcePack/ActivatorI.cpp
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2004-02-29 20:42:15 +0000
committerMark Spruiell <mes@zeroc.com>2004-02-29 20:42:15 +0000
commita475885faf424df5a1b5a1c32db87e98fb8cb2fe (patch)
tree1e79c93d560dcd4fa983a45346602343fa71d696 /cpp/src/IcePack/ActivatorI.cpp
parentfix (diff)
downloadice-a475885faf424df5a1b5a1c32db87e98fb8cb2fe.tar.bz2
ice-a475885faf424df5a1b5a1c32db87e98fb8cb2fe.tar.xz
ice-a475885faf424df5a1b5a1c32db87e98fb8cb2fe.zip
adding Ice::Process for graceful shutdown of IcePack servers
Diffstat (limited to 'cpp/src/IcePack/ActivatorI.cpp')
-rw-r--r--cpp/src/IcePack/ActivatorI.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/cpp/src/IcePack/ActivatorI.cpp b/cpp/src/IcePack/ActivatorI.cpp
index a7827ed920a..46d6f444a9d 100644
--- a/cpp/src/IcePack/ActivatorI.cpp
+++ b/cpp/src/IcePack/ActivatorI.cpp
@@ -418,6 +418,7 @@ IcePack::ActivatorI::activate(const ServerPtr& server)
args.insert(args.end(), server->description.args.begin(), server->description.args.end());
args.insert(args.end(), _propertiesOverride.begin(), _propertiesOverride.end());
args.push_back("--Ice.Default.Locator=" + _properties->getProperty("Ice.Default.Locator"));
+ args.push_back("--Ice.ServerId=" + server->description.name);
if(_traceLevels->activator > 1)
{
@@ -676,7 +677,6 @@ IcePack::ActivatorI::activate(const ServerPtr& server)
//
CloseHandle(pi.hThread);
-
process.pid = pi.dwProcessId;
process.hnd = pi.hProcess;
process.server = server;
@@ -774,7 +774,6 @@ IcePack::ActivatorI::activate(const ServerPtr& server)
//
const char* pwdCStr = pwd.c_str();
-
pid_t pid = fork();
if(pid == -1)
{
@@ -903,8 +902,40 @@ IcePack::ActivatorI::deactivate(const ServerPtr& server)
//
return;
}
+#endif
//
+ // Try to shut down the server gracefully using the process proxy.
+ //
+ Ice::ProcessPrx process = server->getProcess();
+ if(process)
+ {
+ if(_traceLevels->activator > 1)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->activatorCat);
+ out << "deactivating `" << server->description.name << "' using process proxy";
+ }
+ try
+ {
+ process->shutdown();
+ return;
+ }
+ catch(const Ice::LocalException& ex)
+ {
+ Ice::Warning out(_traceLevels->logger);
+ out << "exception occurred while deactivating `" << server->description.name
+ << "' using process proxy:\n" << ex;
+ }
+ }
+
+ if(_traceLevels->activator > 1)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->activatorCat);
+ out << "no process proxy, deactivating `" << server->description.name << "' using signal";
+ }
+
+#ifdef _WIN32
+ //
// Generate a Ctrl+Break event on the child.
//
if(GenerateConsoleCtrlEvent(CTRL_BREAK_EVENT, pid))