diff options
author | Benoit Foucher <benoit@zeroc.com> | 2015-06-10 12:09:55 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2015-06-10 12:09:55 +0200 |
commit | a248a9a3e8a9495d439d1c6ecfc991eb2494e7d0 (patch) | |
tree | 71a263eb13515e9dc7243a90349893870e9d2556 /cpp/src/Glacier2Lib/SessionHelper.cpp | |
parent | Update valgrind suppressions file (diff) | |
download | ice-a248a9a3e8a9495d439d1c6ecfc991eb2494e7d0.tar.bz2 ice-a248a9a3e8a9495d439d1c6ecfc991eb2494e7d0.tar.xz ice-a248a9a3e8a9495d439d1c6ecfc991eb2494e7d0.zip |
Fixed Glacier2 session helper and optional test leak
Diffstat (limited to 'cpp/src/Glacier2Lib/SessionHelper.cpp')
-rw-r--r-- | cpp/src/Glacier2Lib/SessionHelper.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/cpp/src/Glacier2Lib/SessionHelper.cpp b/cpp/src/Glacier2Lib/SessionHelper.cpp index 1a9ba94809c..9dc2d51e99c 100644 --- a/cpp/src/Glacier2Lib/SessionHelper.cpp +++ b/cpp/src/Glacier2Lib/SessionHelper.cpp @@ -144,11 +144,12 @@ public: virtual void run() { _session->destroyInternal(_disconnected); + _session = 0; } private: - const SessionHelperIPtr _session; + SessionHelperIPtr _session; const Ice::DispatcherCallPtr _disconnected; }; @@ -549,12 +550,13 @@ public: _session->dispatchCallback(new ConnectFailed(_callback, _session, ex), 0); } + _session = 0; } private: const Glacier2::SessionCallbackPtr _callback; - const SessionHelperIPtr _session; + SessionHelperIPtr _session; const ConnectStrategyPtr _factory; const Ice::CommunicatorPtr _communicator; const string _finder; @@ -577,11 +579,12 @@ public: virtual void run() { _session->dispatchCallback(_call, _conn); + _session = 0; } private: - const SessionHelperIPtr _session; + SessionHelperIPtr _session; const Ice::DispatcherCallPtr _call; const Ice::ConnectionPtr _conn; }; @@ -867,7 +870,16 @@ Glacier2::SessionFactoryHelper::addThread(const SessionHelper* session, const Ic // we just replace it. // IceUtil::Mutex::Lock sync(_mutex); - _threads.insert(make_pair(session, thread)); + map<const SessionHelper*, IceUtil::ThreadPtr>::iterator p = _threads.find(session); + if(p != _threads.end()) + { + p->second->getThreadControl().join(); + p->second = thread; + } + else + { + _threads.insert(make_pair(session, thread)); + } } void |