summaryrefslogtreecommitdiff
path: root/cpp/src/Glacier2Lib/SessionHelper.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2015-06-10 12:09:55 +0200
committerBenoit Foucher <benoit@zeroc.com>2015-06-10 12:09:55 +0200
commita248a9a3e8a9495d439d1c6ecfc991eb2494e7d0 (patch)
tree71a263eb13515e9dc7243a90349893870e9d2556 /cpp/src/Glacier2Lib/SessionHelper.cpp
parentUpdate valgrind suppressions file (diff)
downloadice-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.cpp20
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