diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-06-02 09:28:11 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-06-02 09:28:11 +0000 |
commit | 68b6340375393f0db2a2446d334c4e9627d491ec (patch) | |
tree | 5498c93d8960e936d9a3d8b840b58cf13a4dbb00 /cpp/src/IceGrid/ServerCache.cpp | |
parent | Added doc for Glacier2.RoutingTable.MaxSize. (diff) | |
download | ice-68b6340375393f0db2a2446d334c4e9627d491ec.tar.bz2 ice-68b6340375393f0db2a2446d334c4e9627d491ec.tar.xz ice-68b6340375393f0db2a2446d334c4e9627d491ec.zip |
Patch application fixes
Diffstat (limited to 'cpp/src/IceGrid/ServerCache.cpp')
-rw-r--r-- | cpp/src/IceGrid/ServerCache.cpp | 69 |
1 files changed, 41 insertions, 28 deletions
diff --git a/cpp/src/IceGrid/ServerCache.cpp b/cpp/src/IceGrid/ServerCache.cpp index 6eec5db224e..baaa997b440 100644 --- a/cpp/src/IceGrid/ServerCache.cpp +++ b/cpp/src/IceGrid/ServerCache.cpp @@ -790,20 +790,17 @@ ServerEntry::allocated(const SessionIPtr& session) // possible to use ${session.*} variable with server with the // session activation mode. // + if(_loaded.get() && _loaded->descriptor->activation == "session" || + _load.get() && _load->descriptor->activation == "session") { - Lock sync(*this); - if(_loaded.get() && _loaded->descriptor->activation == "session" || - _load.get() && _load->descriptor->activation == "session") + _updated = true; + if(!_load.get()) { - _updated = true; - if(!_load.get()) - { - _load = _loaded; - } - _proxy = 0; - _adapters.clear(); - _session = session; + _load = _loaded; } + _proxy = 0; + _adapters.clear(); + _session = session; } Glacier2::SessionControlPrx ctl = session->getSessionControl(); @@ -834,22 +831,17 @@ ServerEntry::released(const SessionIPtr& session) // session activation mode. Synchronizing the server will also // shutdown the server on the node. // - bool syncNow = false; + if(_loaded.get() && _loaded->descriptor->activation == "session" || + _load.get() && _load->descriptor->activation == "session") { - Lock sync(*this); - if(_loaded.get() && _loaded->descriptor->activation == "session" || - _load.get() && _load->descriptor->activation == "session") + _updated = true; + if(!_load.get()) { - _updated = true; - if(!_load.get()) - { - _load = _loaded; - } - _proxy = 0; - _adapters.clear(); - _session = 0; - syncNow = true; + _load = _loaded; } + _proxy = 0; + _adapters.clear(); + _session = 0; } Glacier2::SessionControlPrx ctl = session->getSessionControl(); @@ -874,11 +866,32 @@ ServerEntry::released(const SessionIPtr& session) { Ice::Trace out(traceLevels->logger, traceLevels->serverCat); out << "server `" << _id << "' released by `" << session->getId() << "' (" << _count << ")"; - } + } +} - if(syncNow) +bool +ServerEntry::release(const SessionIPtr& session, bool fromRelease) +{ + bool released = Allocatable::release(session, fromRelease); + + // + // If this server was released (and not from another release + // call), we check if it needs to be synced. + // + if(released && !fromRelease) { - syncImpl(false); // We sync here to ensure the server will be shutdown. + { + Lock sync(*this); + if(!_updated || + _loaded.get() && _loaded->descriptor->activation != "session" || + _load.get() && _load->descriptor->activation != "session") + { + return true; + } + } + + syncImpl(false); // We sync here to ensure the "session" server will be shutdown. } -} + return released; +} |