Fix compile error in /dev/poll reactor.
diff --git a/asio/include/asio/detail/dev_poll_reactor.hpp b/asio/include/asio/detail/dev_poll_reactor.hpp index 0dab12a..b1ac61a 100644 --- a/asio/include/asio/detail/dev_poll_reactor.hpp +++ b/asio/include/asio/detail/dev_poll_reactor.hpp
@@ -160,10 +160,6 @@ ASIO_DECL void cancel_ops_unlocked(socket_type descriptor, const asio::error_code& ec); - // Helper class used to reregister descriptors after a fork. - class fork_helper; - friend class fork_helper; - // Add a pending event entry for the given descriptor. ASIO_DECL ::pollfd& add_pending_event_change(int descriptor);
diff --git a/asio/include/asio/detail/impl/dev_poll_reactor.ipp b/asio/include/asio/detail/impl/dev_poll_reactor.ipp index 1f365df..a7c79de 100644 --- a/asio/include/asio/detail/impl/dev_poll_reactor.ipp +++ b/asio/include/asio/detail/impl/dev_poll_reactor.ipp
@@ -67,27 +67,6 @@ io_service_.abandon_operations(ops); } -// Helper class to re-register all descriptors with /dev/poll. -class dev_poll_reactor::fork_helper -{ -public: - fork_helper(dev_poll_reactor* reactor, short events) - : reactor_(reactor), events_(events) - { - } - - bool set(int descriptor) - { - ::pollfd& ev = reactor_->add_pending_event_change(descriptor); - ev.events = events_; - return true; - } - -private: - dev_poll_reactor* reactor_; - short events_; -}; - void dev_poll_reactor::fork_service(asio::io_service::fork_event fork_ev) { if (fork_ev == asio::io_service::fork_child) @@ -110,18 +89,24 @@ // Re-register all descriptors with /dev/poll. The changes will be written // to the /dev/poll descriptor the next time the reactor is run. - op_queue<operation> ops; - fork_helper read_op_helper(this, POLLERR | POLLHUP | POLLIN); - op_queue_[read_op].get_descriptors(read_op_helper, ops); - fork_helper write_op_helper(this, POLLERR | POLLHUP | POLLOUT); - op_queue_[write_op].get_descriptors(write_op_helper, ops); - fork_helper except_op_helper(this, POLLERR | POLLHUP | POLLPRI); - op_queue_[except_op].get_descriptors(except_op_helper, ops); + for (int i = 0; i < max_ops; ++i) + { + reactor_op_queue<socket_type>::iterator iter = op_queue_[i].begin(); + reactor_op_queue<socket_type>::iterator end = op_queue_[i].end(); + for (; iter != end; ++iter) + { + ::pollfd& pending_ev = add_pending_event_change(iter->first); + pending_ev.events |= POLLERR | POLLHUP; + switch (i) + { + case read_op: pending_ev.events |= POLLIN; break; + case write_op: pending_ev.events |= POLLOUT; break; + case except_op: pending_ev.events |= POLLPRI; break; + default: break; + } + } + } interrupter_.interrupt(); - - // The ops op_queue will always be empty because the fork_helper's set() - // member function never returns false. - ASIO_ASSERT(ops.empty()); } }