diff options
Diffstat (limited to 'cpp/src/IceGrid/ServerI.cpp')
-rw-r--r-- | cpp/src/IceGrid/ServerI.cpp | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp index 659bf108373..851b2ef02e0 100644 --- a/cpp/src/IceGrid/ServerI.cpp +++ b/cpp/src/IceGrid/ServerI.cpp @@ -417,7 +417,7 @@ ServerI::terminated(const Ice::Current& current) { try { - p->second->setDirectProxy(0, current); + p->second->setDirectProxy(0); } catch(const Ice::ObjectNotExistException&) { @@ -474,6 +474,7 @@ bool ServerI::startInternal(ServerActivation act, const AMD_Server_startPtr& amdCB) { ServerDescriptorPtr desc; + map<string, ServerAdapterIPtr> adpts; while(true) { Lock sync(*this); @@ -528,6 +529,7 @@ ServerI::startInternal(ServerActivation act, const AMD_Server_startPtr& amdCB) assert(_state == ServerI::Activating); desc = _desc; + adpts = _adapters; if(amdCB) { _startCB.push_back(amdCB); @@ -551,6 +553,21 @@ ServerI::startInternal(ServerActivation act, const AMD_Server_startPtr& amdCB) pwd = _serverDir + "/data"; } + // + // Clear the adapters direct proxy (this is usefull if the server + // was manually activated). + // + for(map<string, ServerAdapterIPtr>::iterator p = adpts.begin(); p != adpts.end(); ++p) + { + try + { + p->second->setDirectProxy(0); + } + catch(const Ice::ObjectNotExistException&) + { + } + } + try { bool started = _node->getActivator()->activate(desc->id, desc->exe, pwd, options, envs, _this); |