diff options
Diffstat (limited to 'cpp/src/Glacier2Lib/SessionHelper.cpp')
-rw-r--r-- | cpp/src/Glacier2Lib/SessionHelper.cpp | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/cpp/src/Glacier2Lib/SessionHelper.cpp b/cpp/src/Glacier2Lib/SessionHelper.cpp index 85c513a7081..bc0f625d503 100644 --- a/cpp/src/Glacier2Lib/SessionHelper.cpp +++ b/cpp/src/Glacier2Lib/SessionHelper.cpp @@ -507,21 +507,40 @@ public: _callback(callback), _session(session) { +#ifdef ICE_CPP11_MAPPING + _ex = ex.ice_clone(); +#else _ex.reset(ex.ice_clone()); +#endif } virtual void run() { +#ifdef ICE_CPP11_MAPPING + try + { + rethrow_exception(_ex); + } + catch(const Ice::Exception& ex) + { + _callback->connectFailed(_session, ex); + } +#else const Ice::Exception* ex(_ex.get()); _callback->connectFailed(_session, *ex); +#endif } private: const Glacier2::SessionCallbackPtr _callback; const Glacier2::SessionHelperPtr _session; +#ifdef ICE_CPP11_MAPPING + std::exception_ptr _ex; +#else IceUtil::UniquePtr<Ice::Exception> _ex; +#endif }; class CreatedCommunicator : public Ice::DispatcherCall |