Coverage Report

Created: 2025-04-14 16:24

/Users/mcomp/contrib/bitcoin/src/leveldb/util/mutexlock.h
Line
Count
Source (jump to first uncovered line)
1
// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2
// Use of this source code is governed by a BSD-style license that can be
3
// found in the LICENSE file. See the AUTHORS file for names of contributors.
4
5
#ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
6
#define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
7
8
#include "port/port.h"
9
#include "port/thread_annotations.h"
10
11
namespace leveldb {
12
13
// Helper class that locks a mutex on construction and unlocks the mutex when
14
// the destructor of the MutexLock object is invoked.
15
//
16
// Typical usage:
17
//
18
//   void MyClass::MyMethod() {
19
//     MutexLock l(&mu_);       // mu_ is an instance variable
20
//     ... some complex code, possibly with multiple return paths ...
21
//   }
22
23
class SCOPED_LOCKABLE MutexLock {
24
 public:
25
0
  explicit MutexLock(port::Mutex* mu) EXCLUSIVE_LOCK_FUNCTION(mu) : mu_(mu) {
26
0
    this->mu_->Lock();
27
0
  }
28
0
  ~MutexLock() UNLOCK_FUNCTION() { this->mu_->Unlock(); }
29
30
  MutexLock(const MutexLock&) = delete;
31
  MutexLock& operator=(const MutexLock&) = delete;
32
33
 private:
34
  port::Mutex* const mu_;
35
};
36
37
}  // namespace leveldb
38
39
#endif  // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_