summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/ServerCache.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2006-06-02 09:28:11 +0000
committerBenoit Foucher <benoit@zeroc.com>2006-06-02 09:28:11 +0000
commit68b6340375393f0db2a2446d334c4e9627d491ec (patch)
tree5498c93d8960e936d9a3d8b840b58cf13a4dbb00 /cpp/src/IceGrid/ServerCache.cpp
parentAdded doc for Glacier2.RoutingTable.MaxSize. (diff)
downloadice-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.cpp69
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;
+}