summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Selector.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2014-10-16 09:19:47 +0200
committerBenoit Foucher <benoit@zeroc.com>2014-10-16 09:19:47 +0200
commit70cdbd221ade4596e2d66594a562e8699c0c3311 (patch)
tree276a82c4e5e34a1fe542c8c3840be4572282e334 /cpp/src/Ice/Selector.cpp
parentCHANGES updates (diff)
downloadice-70cdbd221ade4596e2d66594a562e8699c0c3311.tar.bz2
ice-70cdbd221ade4596e2d66594a562e8699c0c3311.tar.xz
ice-70cdbd221ade4596e2d66594a562e8699c0c3311.zip
Fixed ICE-5746: selector bad file descriptor on OS X
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;
}