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.cpp21
1 files changed, 8 insertions, 13 deletions
diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp
index ef36a25c71f..12f0c508496 100644
--- a/cpp/src/Ice/Selector.cpp
+++ b/cpp/src/Ice/Selector.cpp
@@ -419,23 +419,18 @@ Selector::finish(EventHandler* handler, bool closeNow)
{
if(handler->_registered)
{
- if(closeNow)
- {
- //
- // Don't bother to un-register if the call wants to close
- // the FD now, kqueue/epoll will automatically unregister
- // the FD when it's closed.
- //
- handler->_registered = SocketOperationNone;
- }
- else
+ update(handler, handler->_registered, SocketOperationNone);
+#if defined(ICE_USE_KQUEUE)
+ if(closeNow && !_changes.empty())
{
//
- // If close on finish is requested, we can safely
- // unregister the FD from the selector.
+ // Update selector now to remove the FD from the kqueue if
+ // we're going to close it now. This isn't necessary for
+ // epoll since we always update the epoll FD immediately.
//
- update(handler, handler->_registered, SocketOperationNone);
+ updateSelector();
}
+#endif
}
return closeNow;
}