summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerI.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2007-11-28 10:00:43 -0500
committerBernard Normier <bernard@zeroc.com>2007-11-28 10:00:43 -0500
commit9b300be79e1feebd09f16e01adeb5a7a005cda2e (patch)
tree59f531f3347d9087fdc641a1e05f1e4675bdb0c4 /cpp/src/IceGrid/ServerI.cpp
parentFirst cut callback support (diff)
parentAdded -D_STLP_NEW_PLATFORM_SDK for VC6 build (diff)
downloadice-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.cpp24
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);