Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <vereign/kvstore/lock.hh>
#include <vereign/kvstore/errors.hh>
#include <thread>
#include <sqlite3.h>
namespace vereign::kvstore {
Lock::Lock(Storage& storage)
: storage_{storage}
{
storage.Lock();
}
Lock::Lock(Storage& storage, int retry_count, std::chrono::milliseconds sleep_interval)
: storage_{storage}
{
for (int i = 0; i < retry_count; i++) {
try {
storage.Lock();
return;
} catch (const LockError& err) {
std::this_thread::sleep_for(sleep_interval);
continue;
}
}
throw LockError{};
}
Lock::~Lock() noexcept {
storage_.Unlock();
}
} // namespace vereign::kvstore