diff options
author | Benoit Foucher <benoit@zeroc.com> | 2014-10-16 09:19:47 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2014-10-16 09:19:47 +0200 |
commit | 70cdbd221ade4596e2d66594a562e8699c0c3311 (patch) | |
tree | 276a82c4e5e34a1fe542c8c3840be4572282e334 /cpp/src/Ice/Selector.cpp | |
parent | CHANGES updates (diff) | |
download | ice-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.cpp | 21 |
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; } |