From 0083ddd7a0afc48a2917d0ebf73bf6bbbdc9fb90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Jadwiszczak?= Date: Mon, 13 Nov 2023 12:35:27 +0100 Subject: [PATCH] generic_server: use mutable reference in `for_each_gently` Make `generic_server::gentle_iterator` a mutable iterator to allow `for_each_gently` to make changes to the connections. Fixes: #16035 Closes scylladb/scylladb#16036 --- generic_server.cc | 2 +- generic_server.hh | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/generic_server.cc b/generic_server.cc index 43abf16566..669f326b8d 100644 --- a/generic_server.cc +++ b/generic_server.cc @@ -40,7 +40,7 @@ connection::~connection() _server.maybe_stop(); } -future<> server::for_each_gently(noncopyable_function fn) { +future<> server::for_each_gently(noncopyable_function fn) { _gentle_iterators.emplace_front(*this); std::list::iterator gi = _gentle_iterators.begin(); return seastar::do_until([ gi ] { return gi->iter == gi->end; }, diff --git a/generic_server.hh b/generic_server.hh index 2234507f98..5593d42fb6 100644 --- a/generic_server.hh +++ b/generic_server.hh @@ -85,8 +85,8 @@ protected: using connections_list_t = boost::intrusive::list; connections_list_t _connections_list; struct gentle_iterator { - connections_list_t::const_iterator iter, end; - gentle_iterator(const server& s) : iter(s._connections_list.begin()), end(s._connections_list.end()) {} + connections_list_t::iterator iter, end; + gentle_iterator(server& s) : iter(s._connections_list.begin()), end(s._connections_list.end()) {} gentle_iterator(const gentle_iterator&) = delete; gentle_iterator(gentle_iterator&&) = delete; }; @@ -118,7 +118,7 @@ protected: virtual future<> unadvertise_connection(shared_ptr conn); - future<> for_each_gently(noncopyable_function); + future<> for_each_gently(noncopyable_function); void maybe_stop(); };