diff --git a/service/storage_proxy.cc b/service/storage_proxy.cc index c214f0531f26..0ed73620545b 100644 --- a/service/storage_proxy.cc +++ b/service/storage_proxy.cc @@ -1811,7 +1811,15 @@ storage_proxy::storage_proxy(distributed& db, storage_proxy::config cf } storage_proxy::unique_response_handler::unique_response_handler(storage_proxy& p_, response_id_type id_) : id(id_), p(p_) {} -storage_proxy::unique_response_handler::unique_response_handler(unique_response_handler&& x) : id(x.id), p(x.p) { x.id = 0; }; +storage_proxy::unique_response_handler::unique_response_handler(unique_response_handler&& x) noexcept : id(x.id), p(x.p) { x.id = 0; }; + +storage_proxy::unique_response_handler& +storage_proxy::unique_response_handler::operator=(unique_response_handler&& x) noexcept { + // this->p must equal x.p + id = std::exchange(x.id, 0); + return *this; +} + storage_proxy::unique_response_handler::~unique_response_handler() { if (id) { p.remove_response_handler(id); diff --git a/service/storage_proxy.hh b/service/storage_proxy.hh index c6059407e40c..58a0648f68c7 100644 --- a/service/storage_proxy.hh +++ b/service/storage_proxy.hh @@ -194,7 +194,8 @@ private: unique_response_handler(storage_proxy& p_, response_id_type id_); unique_response_handler(const unique_response_handler&) = delete; unique_response_handler& operator=(const unique_response_handler&) = delete; - unique_response_handler(unique_response_handler&& x); + unique_response_handler(unique_response_handler&& x) noexcept; + unique_response_handler& operator=(unique_response_handler&&) noexcept; ~unique_response_handler(); response_id_type release(); };