summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Selector.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/Ice/Selector.cpp')
-rw-r--r--cpp/src/Ice/Selector.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp
index 1035955b050..094b6f9734e 100644
--- a/cpp/src/Ice/Selector.cpp
+++ b/cpp/src/Ice/Selector.cpp
@@ -77,11 +77,13 @@ Selector::initialize(EventHandler* handler)
ex.error = GetLastError();
throw ex;
}
- handler->__incRef();
handler->getNativeInfo()->initialize(_handle, reinterpret_cast<ULONG_PTR>(handler));
#else
+# ifdef ICE_CPP11_MAPPING
+ EventHandlerPtr h = dynamic_pointer_cast<EventHandler>(handler->shared_from_this());
+# else
EventHandlerPtr h = handler;
- handler->__incRef();
+# endif
handler->getNativeInfo()->setCompletedHandler(
ref new SocketOperationCompletedHandler(
[=](int operation)
@@ -117,7 +119,6 @@ Selector::finish(IceInternal::EventHandler* handler)
{
handler->_registered = SocketOperationNone;
handler->_finish = false; // Ensures that finished() is only called once on the event handler.
- handler->__decRef();
}
void
@@ -721,7 +722,12 @@ Selector::finishSelect(vector<pair<EventHandler*, SocketOperation> >& handlers)
continue; // Interrupted
}
+#ifdef ICE_CPP11_MAPPING
+ map<EventHandlerPtr, SocketOperation>::iterator q = _readyHandlers.find(
+ dynamic_pointer_cast<EventHandler>(p.first->shared_from_this()));
+#else
map<EventHandlerPtr, SocketOperation>::iterator q = _readyHandlers.find(p.first);
+#endif
if(q != _readyHandlers.end()) // Handler will be added by the loop below
{
q->second = p.second; // We just remember which operations are ready here.
@@ -831,12 +837,22 @@ Selector::checkReady(EventHandler* handler)
{
if(handler->_ready & ~handler->_disabled & handler->_registered)
{
+#ifdef ICE_CPP11_MAPPING
+ _readyHandlers.insert(make_pair(dynamic_pointer_cast<EventHandler>(handler->shared_from_this()),
+ SocketOperationNone));
+#else
_readyHandlers.insert(make_pair(handler, SocketOperationNone));
+#endif
wakeup();
}
else
{
+#ifdef ICE_CPP11_MAPPING
+ map<EventHandlerPtr, SocketOperation>::iterator p =
+ _readyHandlers.find(dynamic_pointer_cast<EventHandler>(handler->shared_from_this()));
+#else
map<EventHandlerPtr, SocketOperation>::iterator p = _readyHandlers.find(handler);
+#endif
if(p != _readyHandlers.end())
{
_readyHandlers.erase(p);