aboutsummaryrefslogtreecommitdiff
path: root/src/leveldb/util/mutexlock.h
diff options
context:
space:
mode:
authorMike Hearn <hearn@google.com>2012-06-25 11:17:22 +0200
committerPieter Wuille <pieter.wuille@gmail.com>2012-10-20 23:08:56 +0200
commit5e650d6d2dbfc284c300668e71188e663d8f0a45 (patch)
treebef5ac4e7bfa9845b23ea975be58fa3fe108ef4b /src/leveldb/util/mutexlock.h
parent38ac953b9df1f7a884c1ef0e94301e14c4e7477d (diff)
Import LevelDB 1.5, it will be used for the transaction database.
Diffstat (limited to 'src/leveldb/util/mutexlock.h')
-rw-r--r--src/leveldb/util/mutexlock.h39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/leveldb/util/mutexlock.h b/src/leveldb/util/mutexlock.h
new file mode 100644
index 0000000000..c3f3306d3e
--- /dev/null
+++ b/src/leveldb/util/mutexlock.h
@@ -0,0 +1,39 @@
+// Copyright (c) 2011 The LevelDB Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file. See the AUTHORS file for names of contributors.
+
+#ifndef STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
+#define STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_
+
+#include "port/port.h"
+
+namespace leveldb {
+
+// Helper class that locks a mutex on construction and unlocks the mutex when
+// the destructor of the MutexLock object is invoked.
+//
+// Typical usage:
+//
+// void MyClass::MyMethod() {
+// MutexLock l(&mu_); // mu_ is an instance variable
+// ... some complex code, possibly with multiple return paths ...
+// }
+
+class MutexLock {
+ public:
+ explicit MutexLock(port::Mutex *mu) : mu_(mu) {
+ this->mu_->Lock();
+ }
+ ~MutexLock() { this->mu_->Unlock(); }
+
+ private:
+ port::Mutex *const mu_;
+ // No copying allowed
+ MutexLock(const MutexLock&);
+ void operator=(const MutexLock&);
+};
+
+} // namespace leveldb
+
+
+#endif // STORAGE_LEVELDB_UTIL_MUTEXLOCK_H_