From: Pavel Emelyanov <
xe...@scylladb.com>
Committer: Pavel Emelyanov <
xe...@scylladb.com>
Branch: master
reactor: Generalize timer removal
All three reactor::del_timer() implementations use the same logic that
fits naturally to timer_set itself. The original remove() method is kept
as memcached needs one, since it doesn't mess with expired lists.
Signed-off-by: Pavel Emelyanov <
xe...@scylladb.com>
---
diff --git a/include/seastar/core/timer-set.hh b/include/seastar/core/timer-set.hh
--- a/include/seastar/core/timer-set.hh
+++ b/include/seastar/core/timer-set.hh
@@ -160,6 +160,19 @@ public:
}
}
+ /**
+ * Removes timer from the active set or the expired list, if the timer is expired
+ */
+ void remove(Timer& timer, timer_list_t& expired) noexcept
+ {
+ if (timer._expired) {
+ expired.erase(expired.iterator_to(timer));
+ timer._expired = false;
+ } else {
+ remove(timer);
+ }
+ }
+
/**
* Expires active timers.
*
diff --git a/src/core/reactor.cc b/src/core/reactor.cc
--- a/src/core/reactor.cc
+++ b/src/core/reactor.cc
@@ -2463,12 +2463,7 @@ bool reactor::queue_timer(timer<steady_clock_type>* tmr) noexcept {
}
void reactor::del_timer(timer<steady_clock_type>* tmr) noexcept {
- if (tmr->_expired) {
- _expired_timers.erase(_expired_timers.iterator_to(*tmr));
- tmr->_expired = false;
- } else {
- _timers.remove(*tmr);
- }
+ _timers.remove(*tmr, _expired_timers);
}
void reactor::add_timer(timer<lowres_clock>* tmr) noexcept {
@@ -2482,12 +2477,7 @@ bool reactor::queue_timer(timer<lowres_clock>* tmr) noexcept {
}
void reactor::del_timer(timer<lowres_clock>* tmr) noexcept {
- if (tmr->_expired) {
- _expired_lowres_timers.erase(_expired_lowres_timers.iterator_to(*tmr));
- tmr->_expired = false;
- } else {
- _lowres_timers.remove(*tmr);
- }
+ _lowres_timers.remove(*tmr, _expired_lowres_timers);
}
void reactor::add_timer(timer<manual_clock>* tmr) noexcept {
@@ -2499,12 +2489,7 @@ bool reactor::queue_timer(timer<manual_clock>* tmr) noexcept {
}
void reactor::del_timer(timer<manual_clock>* tmr) noexcept {
- if (tmr->_expired) {
- _expired_manual_timers.erase(_expired_manual_timers.iterator_to(*tmr));
- tmr->_expired = false;
- } else {
- _manual_timers.remove(*tmr);
- }
+ _manual_timers.remove(*tmr, _expired_manual_timers);
}
void reactor::at_exit(noncopyable_function<future<> ()> func) {