diff options
author | Benoit Foucher <benoit@zeroc.com> | 2011-06-01 12:10:30 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2011-06-01 12:10:30 +0200 |
commit | 254bc9fea4104d4c2dec0ebee16710c72805e1ea (patch) | |
tree | 4ebeaf640e763708061368d2c6129acff9ffd2b1 /cpp/src/Ice/Selector.cpp | |
parent | 5126 - The add-in don't work with non english VS install (diff) | |
download | ice-254bc9fea4104d4c2dec0ebee16710c72805e1ea.tar.bz2 ice-254bc9fea4104d4c2dec0ebee16710c72805e1ea.tar.xz ice-254bc9fea4104d4c2dec0ebee16710c72805e1ea.zip |
Fixed bug 5127 - epoll selector error
Diffstat (limited to 'cpp/src/Ice/Selector.cpp')
-rw-r--r-- | cpp/src/Ice/Selector.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/cpp/src/Ice/Selector.cpp b/cpp/src/Ice/Selector.cpp index 60da48eb095..b8e15e41aea 100644 --- a/cpp/src/Ice/Selector.cpp +++ b/cpp/src/Ice/Selector.cpp @@ -223,7 +223,7 @@ Selector::update(EventHandler* handler, SocketOperation remove, SocketOperation { op = EPOLL_CTL_DEL; } - else if(!previous && !status) + else if(previous == status) { return; } @@ -283,12 +283,13 @@ Selector::enable(EventHandler* handler, SocketOperation status) { SOCKET fd = handler->getNativeInfo()->fd(); #if defined(ICE_USE_EPOLL) - SocketOperation previous = static_cast<SocketOperation>(handler->_registered & ~status); + SocketOperation previous = static_cast<SocketOperation>(handler->_registered & ~(handler->_disabled | status)); + SocketOperation newStatus = static_cast<SocketOperation>(handler->_registered & ~handler->_disabled); epoll_event event; memset(&event, 0, sizeof(epoll_event)); event.data.ptr = handler; - event.events |= handler->_registered & SocketOperationRead ? EPOLLIN : 0; - event.events |= handler->_registered & SocketOperationWrite ? EPOLLOUT : 0; + event.events |= newStatus & SocketOperationRead ? EPOLLIN : 0; + event.events |= newStatus & SocketOperationWrite ? EPOLLOUT : 0; if(epoll_ctl(_queueFd, previous ? EPOLL_CTL_MOD : EPOLL_CTL_ADD, fd, &event) != 0) { Ice::Error out(_instance->initializationData().logger); @@ -319,7 +320,7 @@ Selector::disable(EventHandler* handler, SocketOperation status) { SOCKET fd = handler->getNativeInfo()->fd(); #if defined(ICE_USE_EPOLL) - SocketOperation newStatus = static_cast<SocketOperation>(handler->_registered & ~status); + SocketOperation newStatus = static_cast<SocketOperation>(handler->_registered & ~handler->_disabled); epoll_event event; memset(&event, 0, sizeof(epoll_event)); event.data.ptr = handler; |