diff options
author | Benoit Foucher <benoit@zeroc.com> | 2006-09-12 09:01:35 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2006-09-12 09:01:35 +0000 |
commit | d89514da858be06f7e44129bcd6675a46181208e (patch) | |
tree | 662073ca1e8a9b6e56e9914087da66a824b88d6c /cpp/src/IceGrid/SessionManager.h | |
parent | Minor Makefile tweak. (diff) | |
download | ice-d89514da858be06f7e44129bcd6675a46181208e.tar.bz2 ice-d89514da858be06f7e44129bcd6675a46181208e.tar.xz ice-d89514da858be06f7e44129bcd6675a46181208e.zip |
Fixes
Diffstat (limited to 'cpp/src/IceGrid/SessionManager.h')
-rw-r--r-- | cpp/src/IceGrid/SessionManager.h | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/cpp/src/IceGrid/SessionManager.h b/cpp/src/IceGrid/SessionManager.h index da7b837cb2b..fc358d19a87 100644 --- a/cpp/src/IceGrid/SessionManager.h +++ b/cpp/src/IceGrid/SessionManager.h @@ -28,6 +28,7 @@ class SessionKeepAliveThread : public IceUtil::Thread, public IceUtil::Monitor<I Disconnected, Connected, Retry, + DestroySession, Destroyed }; @@ -46,6 +47,7 @@ public: FPrx factory = _factory; bool updateState = false; IceUtil::Time timeout = IceUtil::Time::seconds(10); + bool destroy = false; while(true) { @@ -116,9 +118,9 @@ public: { Lock sync(*this); - if(_state != Destroyed && _state != Retry) + if(_state == Connected || _state == Disconnected) { - timedWait(timeout); // TODO: XXX: Timeout / 2 instead? + timedWait(timeout); } if(_state == Destroyed) @@ -126,9 +128,22 @@ public: break; } - updateState = _state == Retry; + if(_state == DestroySession && session) + { + destroy = true; + } + + updateState = _state == Retry || _state == DestroySession; factory = _factory; } + + if(destroy) + { + assert(session); + destroySession(session); + destroy = false; + session = 0; + } } // @@ -184,6 +199,14 @@ public: } void + destroyActiveSession() + { + Lock sync(*this); + _state = DestroySession; + notifyAll(); + } + + void terminate() { Lock sync(*this); |