]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/boost/asio/detail/impl/dev_poll_reactor.hpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / boost / asio / detail / impl / dev_poll_reactor.hpp
CommitLineData
7c673cae
FG
1//
2// detail/impl/dev_poll_reactor.hpp
3// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
4//
1e59de90 5// Copyright (c) 2003-2022 Christopher M. Kohlhoff (chris at kohlhoff dot com)
7c673cae
FG
6//
7// Distributed under the Boost Software License, Version 1.0. (See accompanying
8// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9//
10
11#ifndef BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
12#define BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP
13
14#if defined(_MSC_VER) && (_MSC_VER >= 1200)
15# pragma once
16#endif // defined(_MSC_VER) && (_MSC_VER >= 1200)
17
18#include <boost/asio/detail/config.hpp>
19
20#if defined(BOOST_ASIO_HAS_DEV_POLL)
21
1e59de90
TL
22#include <boost/asio/detail/scheduler.hpp>
23
7c673cae
FG
24#include <boost/asio/detail/push_options.hpp>
25
26namespace boost {
27namespace asio {
28namespace detail {
29
1e59de90
TL
30inline void dev_poll_reactor::post_immediate_completion(
31 reactor_op* op, bool is_continuation)
32{
33 scheduler_.post_immediate_completion(op, is_continuation);
34}
35
7c673cae
FG
36template <typename Time_Traits>
37void dev_poll_reactor::add_timer_queue(timer_queue<Time_Traits>& queue)
38{
39 do_add_timer_queue(queue);
40}
41
42template <typename Time_Traits>
43void dev_poll_reactor::remove_timer_queue(timer_queue<Time_Traits>& queue)
44{
45 do_remove_timer_queue(queue);
46}
47
48template <typename Time_Traits>
49void dev_poll_reactor::schedule_timer(timer_queue<Time_Traits>& queue,
50 const typename Time_Traits::time_type& time,
51 typename timer_queue<Time_Traits>::per_timer_data& timer, wait_op* op)
52{
53 boost::asio::detail::mutex::scoped_lock lock(mutex_);
54
55 if (shutdown_)
56 {
b32b8144 57 scheduler_.post_immediate_completion(op, false);
7c673cae
FG
58 return;
59 }
60
61 bool earliest = queue.enqueue_timer(time, timer, op);
b32b8144 62 scheduler_.work_started();
7c673cae
FG
63 if (earliest)
64 interrupter_.interrupt();
65}
66
67template <typename Time_Traits>
68std::size_t dev_poll_reactor::cancel_timer(timer_queue<Time_Traits>& queue,
69 typename timer_queue<Time_Traits>::per_timer_data& timer,
70 std::size_t max_cancelled)
71{
72 boost::asio::detail::mutex::scoped_lock lock(mutex_);
73 op_queue<operation> ops;
74 std::size_t n = queue.cancel_timer(timer, ops, max_cancelled);
75 lock.unlock();
b32b8144 76 scheduler_.post_deferred_completions(ops);
7c673cae
FG
77 return n;
78}
79
1e59de90
TL
80template <typename Time_Traits>
81void dev_poll_reactor::cancel_timer_by_key(timer_queue<Time_Traits>& queue,
82 typename timer_queue<Time_Traits>::per_timer_data* timer,
83 void* cancellation_key)
84{
85 boost::asio::detail::mutex::scoped_lock lock(mutex_);
86 op_queue<operation> ops;
87 queue.cancel_timer_by_key(timer, ops, cancellation_key);
88 lock.unlock();
89 scheduler_.post_deferred_completions(ops);
90}
91
b32b8144
FG
92template <typename Time_Traits>
93void dev_poll_reactor::move_timer(timer_queue<Time_Traits>& queue,
94 typename timer_queue<Time_Traits>::per_timer_data& target,
95 typename timer_queue<Time_Traits>::per_timer_data& source)
96{
97 boost::asio::detail::mutex::scoped_lock lock(mutex_);
98 op_queue<operation> ops;
99 queue.cancel_timer(target, ops);
100 queue.move_timer(target, source);
101 lock.unlock();
102 scheduler_.post_deferred_completions(ops);
103}
104
7c673cae
FG
105} // namespace detail
106} // namespace asio
107} // namespace boost
108
109#include <boost/asio/detail/pop_options.hpp>
110
111#endif // defined(BOOST_ASIO_HAS_DEV_POLL)
112
113#endif // BOOST_ASIO_DETAIL_IMPL_DEV_POLL_REACTOR_HPP