diff options
author | Bernard Normier <bernard@zeroc.com> | 2007-11-28 10:00:43 -0500 |
---|---|---|
committer | Bernard Normier <bernard@zeroc.com> | 2007-11-28 10:00:43 -0500 |
commit | 9b300be79e1feebd09f16e01adeb5a7a005cda2e (patch) | |
tree | 59f531f3347d9087fdc641a1e05f1e4675bdb0c4 /cpp/src/IceGrid/ServerI.cpp | |
parent | First cut callback support (diff) | |
parent | Added -D_STLP_NEW_PLATFORM_SDK for VC6 build (diff) | |
download | ice-9b300be79e1feebd09f16e01adeb5a7a005cda2e.tar.bz2 ice-9b300be79e1feebd09f16e01adeb5a7a005cda2e.tar.xz ice-9b300be79e1feebd09f16e01adeb5a7a005cda2e.zip |
Merge branch 'master' of ssh://cvs.zeroc.com/home/git/ice
Conflicts:
cpp/src/IceGrid/SessionServantManager.cpp
Diffstat (limited to 'cpp/src/IceGrid/ServerI.cpp')
-rw-r--r-- | cpp/src/IceGrid/ServerI.cpp | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/cpp/src/IceGrid/ServerI.cpp b/cpp/src/IceGrid/ServerI.cpp index 507867753d8..f6806884fb5 100644 --- a/cpp/src/IceGrid/ServerI.cpp +++ b/cpp/src/IceGrid/ServerI.cpp @@ -833,18 +833,31 @@ void ServerI::setProcess_async(const AMD_Server_setProcessPtr& amdCB, const Ice::ProcessPrx& process, const Ice::Current&) { bool deact = false; + ServerCommandPtr command; { Lock sync(*this); checkDestroyed(); _process = process; - deact = _state == DeactivatingWaitForProcess; - notifyAll(); + if(_state == DeactivatingWaitForProcess) + { + deact = true; + } + else + { + checkActivation(); + command = nextCommand(); + } } amdCB->ice_response(); + if(deact) { deactivate(); } + else if(command) + { + command->execute(); + } } Ice::Long @@ -2282,7 +2295,12 @@ ServerI::checkActivation() //assert(locked()); if(_state == ServerI::WaitForActivation || _state == ServerI::ActivationTimeout) { - if(includes(_activatedAdapters.begin(), _activatedAdapters.end(), + // + // Mark the server as active if the server process proxy is registered (or it's not expecting + // one to be registered) and if all the server lifetime adapters have been activated. + // + if((!_desc->processRegistered || _process) && + includes(_activatedAdapters.begin(), _activatedAdapters.end(), _serverLifetimeAdapters.begin(), _serverLifetimeAdapters.end())) { setStateNoSync(ServerI::Active); |