summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/ServerI.cpp')
-rw-r--r--cpp/src/IceGrid/ServerI.cpp19
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);