1#include "ActionLock.h"
2#include <Common/ActionBlocker.h>
3
4
5namespace DB
6{
7
8ActionLock::ActionLock(const ActionBlocker & blocker) : counter_ptr(blocker.counter)
9{
10 if (auto counter = counter_ptr.lock())
11 ++(*counter);
12}
13
14ActionLock::ActionLock(ActionLock && other)
15{
16 *this = std::move(other);
17}
18
19ActionLock & ActionLock::operator=(ActionLock && other)
20{
21 auto lock_lhs = this->counter_ptr.lock();
22
23 counter_ptr = std::move(other.counter_ptr);
24 /// After move other.counter_ptr still points to counter, reset it explicitly
25 other.counter_ptr.reset();
26
27 if (lock_lhs)
28 --(*lock_lhs);
29
30 return *this;
31}
32
33}
34