summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriele Svelto <gabriele.svelto@gmail.com>2012-04-07 23:38:17 +0200
committerMartin Sustrik <sustrik@250bpm.com>2012-04-09 06:24:43 +0200
commit1590bf3fb591c23d6d96a3335247e85c72b39d43 (patch)
treeaef60d1221ccd55deca59c3ce5ca66fbd558026c
parentdcc894ec6fb46f0c4739434f8013914b8a6f8a88 (diff)
Fix fd/handle conversion in /dev/poll poller code
Signed-off-by: Gabriele Svelto <gabriele.svelto@gmail.com>
-rw-r--r--src/devpoll.cpp42
1 files changed, 26 insertions, 16 deletions
diff --git a/src/devpoll.cpp b/src/devpoll.cpp
index 276f4d8..e9f172b 100644
--- a/src/devpoll.cpp
+++ b/src/devpoll.cpp
@@ -84,15 +84,17 @@ xs::handle_t xs::devpoll_t::add_fd (fd_t fd_,
// Increase the load metric of the thread.
adjust_load (1);
- return fd_;
+ return fdtoptr (fd_);
}
void xs::devpoll_t::rm_fd (handle_t handle_)
{
- assert (fd_table [handle_].valid);
+ fd_t fd = ptrtofd (handle_);
- devpoll_ctl (handle_, POLLREMOVE);
- fd_table [handle_].valid = false;
+ assert (fd_table [fd].valid);
+
+ devpoll_ctl (fd, POLLREMOVE);
+ fd_table [fd].valid = false;
// Decrease the load metric of the thread.
adjust_load (-1);
@@ -100,30 +102,38 @@ void xs::devpoll_t::rm_fd (handle_t handle_)
void xs::devpoll_t::set_pollin (handle_t handle_)
{
- devpoll_ctl (handle_, POLLREMOVE);
- fd_table [handle_].events |= POLLIN;
- devpoll_ctl (handle_, fd_table [handle_].events);
+ fd_t fd = ptrtofd (handle_);
+
+ devpoll_ctl (fd, POLLREMOVE);
+ fd_table [fd].events |= POLLIN;
+ devpoll_ctl (fd, fd_table [fd].events);
}
void xs::devpoll_t::reset_pollin (handle_t handle_)
{
- devpoll_ctl (handle_, POLLREMOVE);
- fd_table [handle_].events &= ~((short) POLLIN);
- devpoll_ctl (handle_, fd_table [handle_].events);
+ fd_t fd = ptrtofd (handle_);
+
+ devpoll_ctl (fd, POLLREMOVE);
+ fd_table [fd].events &= ~((short) POLLIN);
+ devpoll_ctl (fd, fd_table [fd].events);
}
void xs::devpoll_t::set_pollout (handle_t handle_)
{
- devpoll_ctl (handle_, POLLREMOVE);
- fd_table [handle_].events |= POLLOUT;
- devpoll_ctl (handle_, fd_table [handle_].events);
+ fd_t fd = ptrtofd (handle_);
+
+ devpoll_ctl (fd, POLLREMOVE);
+ fd_table [fd].events |= POLLOUT;
+ devpoll_ctl (fd, fd_table [fd].events);
}
void xs::devpoll_t::reset_pollout (handle_t handle_)
{
- devpoll_ctl (handle_, POLLREMOVE);
- fd_table [handle_].events &= ~((short) POLLOUT);
- devpoll_ctl (handle_, fd_table [handle_].events);
+ fd_t fd = ptrtofd (handle_);
+
+ devpoll_ctl (fd, POLLREMOVE);
+ fd_table [fd].events &= ~((short) POLLOUT);
+ devpoll_ctl (fd, fd_table [fd].events);
}
void xs::devpoll_t::xstart ()