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