load_broadcaster: Unregister from load_broadcaster::stop_broadcasting

This is in preparation for unregistration returning a future.

Signed-off-by: Rafael Ávila de Espíndola <espindola@scylladb.com>
This commit is contained in:
Rafael Ávila de Espíndola
2020-01-20 15:41:55 -08:00
parent 7390485e20
commit c62a33965d
2 changed files with 6 additions and 2 deletions

View File

@@ -56,13 +56,14 @@ private:
std::unordered_map<gms::inet_address, double> _load_info;
timer<> _timer;
future<> _done = make_ready_future<>();
bool _stopped = false;
public:
load_broadcaster(distributed<database>& db, gms::gossiper& g) : _db(db), _gossiper(g) {
_gossiper.register_(shared_from_this());
}
~load_broadcaster() {
_gossiper.unregister_(shared_from_this());
assert(_stopped);
}
void on_change(gms::inet_address endpoint, gms::application_state state, const gms::versioned_value& value) {

View File

@@ -130,7 +130,10 @@ void load_broadcaster::start_broadcasting() {
future<> load_broadcaster::stop_broadcasting() {
_timer.cancel();
return std::move(_done);
_gossiper.unregister_(shared_from_this());
return std::move(_done).then([this] {
_stopped = true;
});
}