diff options
author | Benoit Foucher <benoit@zeroc.com> | 2009-03-04 23:42:26 +0100 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2009-03-04 23:42:26 +0100 |
commit | cdd4b28c36cf1b919cfbd0eda0678744d1563e9e (patch) | |
tree | 9c3ea6eb1e9c9d2c695d75522380389dc014fd7f /cpp/src/IceGrid/ServerAdapterI.cpp | |
parent | Alphabetized (diff) | |
download | ice-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.cpp | 30 |
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 { |