summaryrefslogtreecommitdiff
path: root/cpp/src/Glacier2Lib/SessionHelper.cpp
diff options
context:
space:
mode:
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