diff options
author | Mark Spruiell <mes@zeroc.com> | 2004-02-29 20:42:15 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2004-02-29 20:42:15 +0000 |
commit | a475885faf424df5a1b5a1c32db87e98fb8cb2fe (patch) | |
tree | 1e79c93d560dcd4fa983a45346602343fa71d696 /cpp/src/IcePack/ActivatorI.cpp | |
parent | fix (diff) | |
download | ice-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.cpp | 35 |
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)) |