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 e523011..3940441 100644 --- a/asio/include/asio/detail/dev_poll_reactor.hpp +++ b/asio/include/asio/detail/dev_poll_reactor.hpp
@@ -166,10 +166,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 bde1a59..ac4c391 100644 --- a/asio/include/asio/detail/impl/dev_poll_reactor.ipp +++ b/asio/include/asio/detail/impl/dev_poll_reactor.ipp
@@ -67,6 +67,7 @@ scheduler_.abandon_operations(ops); } +<<<<<<< HEAD // Helper class to re-register all descriptors with /dev/poll. class dev_poll_reactor::fork_helper { @@ -88,8 +89,7 @@ short events_; }; -void dev_poll_reactor::fork_service( - asio::execution_context::fork_event fork_ev) +void dev_poll_reactor::fork_service(asio::io_service::fork_event fork_ev) { if (fork_ev == asio::execution_context::fork_child) { @@ -111,18 +111,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()); } }