summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerAdapterI.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2009-03-04 23:42:26 +0100
committerBenoit Foucher <benoit@zeroc.com>2009-03-04 23:42:26 +0100
commitcdd4b28c36cf1b919cfbd0eda0678744d1563e9e (patch)
tree9c3ea6eb1e9c9d2c695d75522380389dc014fd7f /cpp/src/IceGrid/ServerAdapterI.cpp
parentAlphabetized (diff)
downloadice-cdd4b28c36cf1b919cfbd0eda0678744d1563e9e.tar.bz2
ice-cdd4b28c36cf1b919cfbd0eda0678744d1563e9e.tar.xz
ice-cdd4b28c36cf1b919cfbd0eda0678744d1563e9e.zip
Fixed bug 3776, 3755, 3778 - getAdmin bugs and replicaGroup test warnings
Diffstat (limited to 'cpp/src/IceGrid/ServerAdapterI.cpp')
-rw-r--r--cpp/src/IceGrid/ServerAdapterI.cpp30
1 files changed, 27 insertions, 3 deletions
diff --git a/cpp/src/IceGrid/ServerAdapterI.cpp b/cpp/src/IceGrid/ServerAdapterI.cpp
index 1f9e2fef819..c3114989e5c 100644
--- a/cpp/src/IceGrid/ServerAdapterI.cpp
+++ b/cpp/src/IceGrid/ServerAdapterI.cpp
@@ -31,6 +31,7 @@ ServerAdapterI::ServerAdapterI(const NodeIPtr& node,
ServerAdapterI::~ServerAdapterI()
{
+ assert(_activateCB.empty());
}
void
@@ -70,7 +71,7 @@ ServerAdapterI::activate_async(const AMD_Adapter_activatePtr& cb, const Ice::Cur
{
return;
}
- _activateAfterDeactivating = _server->getState() >= Deactivating;
+ _activateAfterDeactivating = _server->getState() >= Deactivating && _server->getState() < Destroying;
}
//
@@ -94,7 +95,6 @@ ServerAdapterI::activate_async(const AMD_Adapter_activatePtr& cb, const Ice::Cur
// inconsistent if this happens. The best thing to do is to destroy the adapter.
//
destroy();
- activationFailed("server destroyed");
}
catch(const Ice::Exception& ex)
{
@@ -154,7 +154,7 @@ ServerAdapterI::setDirectProxy(const Ice::ObjectPrx& prx, const Ice::Current&)
// now. The server is going to be activated again and the adapter
// activated.
//
- if(_server->getState() < Deactivating || !_activateAfterDeactivating)
+ if(_server->getState() < Deactivating || _server->getState() >= Destroying || !_activateAfterDeactivating)
{
for(vector<AMD_Adapter_activatePtr>::const_iterator p = _activateCB.begin(); p != _activateCB.end(); ++p)
{
@@ -194,6 +194,7 @@ ServerAdapterI::setDirectProxy(const Ice::ObjectPrx& prx, const Ice::Current&)
void
ServerAdapterI::destroy()
{
+ activationFailed("adapter destroyed");
try
{
_node->getAdapter()->remove(_this->ice_getIdentity());
@@ -233,6 +234,29 @@ ServerAdapterI::activationFailed(const std::string& reason)
_activateCB.clear();
}
+void
+ServerAdapterI::activationCompleted()
+{
+ Lock sync(*this);
+ if(!_proxy)
+ {
+ //
+ // The server activation completed, but the adapter hasn't been activated.
+ //
+ if(_node->getTraceLevels()->adapter > 1)
+ {
+ Ice::Trace out(_node->getTraceLevels()->logger, _node->getTraceLevels()->adapterCat);
+ out << "server `" + _serverId + "' adapter `" << _id << "' activation failed: server activation completed";
+ }
+ }
+
+ for(vector<AMD_Adapter_activatePtr>::const_iterator p = _activateCB.begin(); p != _activateCB.end(); ++p)
+ {
+ (*p)->ice_response(_proxy);
+ }
+ _activateCB.clear();
+}
+
AdapterPrx
ServerAdapterI::getProxy() const
{