| // |
| // detail/impl/epoll_reactor.hpp |
| // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| // |
| // Copyright (c) 2003-2010 Christopher M. Kohlhoff (chris at kohlhoff dot com) |
| // |
| // Distributed under the Boost Software License, Version 1.0. (See accompanying |
| // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| // |
| |
| #ifndef BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_HPP |
| #define BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_HPP |
| |
| #if defined(_MSC_VER) && (_MSC_VER >= 1200) |
| # pragma once |
| #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) |
| |
| #if defined(BOOST_ASIO_HAS_EPOLL) |
| |
| #include <boost/asio/detail/push_options.hpp> |
| |
| namespace boost { |
| namespace asio { |
| namespace detail { |
| |
| template <typename Time_Traits> |
| void epoll_reactor::add_timer_queue(timer_queue<Time_Traits>& queue) |
| { |
| do_add_timer_queue(queue); |
| } |
| |
| template <typename Time_Traits> |
| void epoll_reactor::remove_timer_queue(timer_queue<Time_Traits>& queue) |
| { |
| do_remove_timer_queue(queue); |
| } |
| |
| template <typename Time_Traits> |
| void epoll_reactor::schedule_timer(timer_queue<Time_Traits>& queue, |
| const typename Time_Traits::time_type& time, |
| typename timer_queue<Time_Traits>::per_timer_data& timer, timer_op* op) |
| { |
| mutex::scoped_lock lock(mutex_); |
| |
| if (shutdown_) |
| { |
| io_service_.post_immediate_completion(op); |
| return; |
| } |
| |
| bool earliest = queue.enqueue_timer(time, timer, op); |
| io_service_.work_started(); |
| if (earliest) |
| update_timeout(); |
| } |
| |
| template <typename Time_Traits> |
| std::size_t epoll_reactor::cancel_timer(timer_queue<Time_Traits>& queue, |
| typename timer_queue<Time_Traits>::per_timer_data& timer) |
| { |
| mutex::scoped_lock lock(mutex_); |
| op_queue<operation> ops; |
| std::size_t n = queue.cancel_timer(timer, ops); |
| lock.unlock(); |
| io_service_.post_deferred_completions(ops); |
| return n; |
| } |
| |
| } // namespace detail |
| } // namespace asio |
| } // namespace boost |
| |
| #include <boost/asio/detail/pop_options.hpp> |
| |
| #endif // defined(BOOST_ASIO_HAS_EPOLL) |
| |
| #endif // BOOST_ASIO_DETAIL_IMPL_EPOLL_REACTOR_HPP |