mirror of
https://github.com/scylladb/scylladb.git
synced 2026-04-28 04:06:59 +00:00
utils::phased_barrier holds a `lw_shared_ptr<gate>` that is typically `enter()`ed in `phased_barrier::start()`, and left when the operation is destroyed in `~operation`. Currently, the operation move-assign implementation is the default one that just moves the lw_shared gate ptr from the other operation into this one, without calling `_gate->leave()` first. This change first destroys *this when move-assigned (if not self) to call _gate->leave() if engaged, before reassigning the gate with the other operation::_gate. A unit test that reproduces the issue before this change and passes with the fix was added to serialized_action_test. Fixes #8613 Test: unit(dev), serialized_action_test(debug) Signed-off-by: Benny Halevy <bhalevy@scylladb.com> Message-Id: <20210510120703.1520328-1-bhalevy@scylladb.com>