File indexing completed on 2026-09-04 08:41:54
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
0012 #define BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
0013
0014 #if defined(_MSC_VER) && (_MSC_VER >= 1200)
0015 # pragma once
0016 #endif
0017
0018 #include <boost/asio/detail/config.hpp>
0019
0020 #if defined(BOOST_ASIO_HAS_DEV_POLL)
0021
0022 #include <boost/asio/detail/scheduler.hpp>
0023
0024 #include <boost/asio/detail/push_options.hpp>
0025
0026 namespace boost {
0027 namespace asio {
0028 namespace detail {
0029
0030 inline void dev_poll_reactor::post_immediate_completion(
0031 operation* op, bool is_continuation) const
0032 {
0033 scheduler_.post_immediate_completion(op, is_continuation);
0034 }
0035
0036 template <typename TimeTraits, typename Allocator>
0037 void dev_poll_reactor::add_timer_queue(
0038 timer_queue<TimeTraits, Allocator>& queue)
0039 {
0040 do_add_timer_queue(queue);
0041 }
0042
0043 template <typename TimeTraits, typename Allocator>
0044 void dev_poll_reactor::remove_timer_queue(
0045 timer_queue<TimeTraits, Allocator>& queue)
0046 {
0047 do_remove_timer_queue(queue);
0048 }
0049
0050 template <typename TimeTraits, typename Allocator>
0051 void dev_poll_reactor::schedule_timer(
0052 timer_queue<TimeTraits, Allocator>& queue,
0053 const typename TimeTraits::time_type& time,
0054 typename timer_queue<TimeTraits, Allocator>::per_timer_data& timer,
0055 wait_op* op)
0056 {
0057 boost::asio::detail::mutex::scoped_lock lock(mutex_);
0058
0059 if (shutdown_)
0060 {
0061 scheduler_.post_immediate_completion(op, false);
0062 return;
0063 }
0064
0065 bool earliest = queue.enqueue_timer(time, timer, op);
0066 scheduler_.work_started();
0067 if (earliest)
0068 interrupter_.interrupt();
0069 }
0070
0071 template <typename TimeTraits, typename Allocator>
0072 std::size_t dev_poll_reactor::cancel_timer(
0073 timer_queue<TimeTraits, Allocator>& queue,
0074 typename timer_queue<TimeTraits, Allocator>::per_timer_data& timer,
0075 std::size_t max_cancelled)
0076 {
0077 boost::asio::detail::mutex::scoped_lock lock(mutex_);
0078 op_queue<operation> ops;
0079 std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
0080 lock.unlock();
0081 scheduler_.post_deferred_completions(ops);
0082 return n;
0083 }
0084
0085 template <typename TimeTraits, typename Allocator>
0086 void dev_poll_reactor::cancel_timer_by_key(
0087 timer_queue<TimeTraits, Allocator>& queue,
0088 typename timer_queue<TimeTraits, Allocator>::per_timer_data* timer,
0089 void* cancellation_key)
0090 {
0091 boost::asio::detail::mutex::scoped_lock lock(mutex_);
0092 op_queue<operation> ops;
0093 queue.cancel_timer_by_key(timer, ops, cancellation_key);
0094 lock.unlock();
0095 scheduler_.post_deferred_completions(ops);
0096 }
0097
0098 template <typename TimeTraits, typename Allocator>
0099 void dev_poll_reactor::move_timer(timer_queue<TimeTraits, Allocator>& queue,
0100 typename timer_queue<TimeTraits, Allocator>::per_timer_data& target,
0101 typename timer_queue<TimeTraits, Allocator>::per_timer_data& source)
0102 {
0103 boost::asio::detail::mutex::scoped_lock lock(mutex_);
0104 op_queue<operation> ops;
0105 queue.cancel_timer(target, ops);
0106 queue.move_timer(target, source);
0107 lock.unlock();
0108 scheduler_.post_deferred_completions(ops);
0109 }
0110
0111 }
0112 }
0113 }
0114
0115 #include <boost/asio/detail/pop_options.hpp>
0116
0117 #endif
0118
0119 #endif