summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/Selector.cpp
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2011-06-01 12:10:30 +0200
committerBenoit Foucher <benoit@zeroc.com>2011-06-01 12:10:30 +0200
commit254bc9fea4104d4c2dec0ebee16710c72805e1ea (patch)
tree4ebeaf640e763708061368d2c6129acff9ffd2b1 /cpp/src/Ice/Selector.cpp
parent5126 - The add-in don't work with non english VS install (diff)
downloadice-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.cpp11
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;