[COMMIT seastar master] reactor: Generalize timer removal

3 views
Skip to first unread message

Commit Bot

<bot@cloudius-systems.com>
unread,
Jun 17, 2024, 4:28:36 AM6/17/24
to seastar-dev@googlegroups.com, Pavel Emelyanov
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) {
Reply all
Reply to author
Forward
0 new messages