Skip to content
Snippets Groups Projects
lock.cc 641 B
Newer Older
  • Learn to ignore specific revisions
  • #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