diff --git a/include/boost/asio/detail/dev_poll_reactor.hpp b/include/boost/asio/detail/dev_poll_reactor.hpp index 97454df7..aa6add33 100644 --- a/include/boost/asio/detail/dev_poll_reactor.hpp +++ b/include/boost/asio/detail/dev_poll_reactor.hpp @@ -143,6 +143,12 @@ public: typename timer_queue::per_timer_data& timer, std::size_t max_cancelled = (std::numeric_limits::max)()); + // Cancel the timer operations associated with the given key. + template + void cancel_timer_by_key(timer_queue& queue, + typename timer_queue::per_timer_data* timer, + void* cancellation_key); + // Move the timer operations associated with the given timer. template void move_timer(timer_queue& queue, diff --git a/include/boost/asio/detail/impl/dev_poll_reactor.hpp b/include/boost/asio/detail/impl/dev_poll_reactor.hpp index 767851a8..e1720b67 100644 --- a/include/boost/asio/detail/impl/dev_poll_reactor.hpp +++ b/include/boost/asio/detail/impl/dev_poll_reactor.hpp @@ -77,6 +77,18 @@ std::size_t dev_poll_reactor::cancel_timer(timer_queue& queue, return n; } +template +void dev_poll_reactor::cancel_timer_by_key(timer_queue& queue, + typename timer_queue::per_timer_data* timer, + void* cancellation_key) +{ + boost::asio::detail::mutex::scoped_lock lock(mutex_); + op_queue ops; + queue.cancel_timer_by_key(timer, ops, cancellation_key); + lock.unlock(); + scheduler_.post_deferred_completions(ops); +} + template void dev_poll_reactor::move_timer(timer_queue& queue, typename timer_queue::per_timer_data& target,