From 70cdbd221ade4596e2d66594a562e8699c0c3311 Mon Sep 17 00:00:00 2001 From: Benoit Foucher Date: Thu, 16 Oct 2014 09:19:47 +0200 Subject: Fixed ICE-5746: selector bad file descriptor on OS X --- cpp/src/Ice/Selector.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) (limited to 'cpp/src/Ice/Selector.cpp') 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; } -- cgit v1.2.3