aboutsummaryrefslogtreecommitdiff
path: root/src/leveldb/port/port_win.h
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2012-12-12 02:20:18 +0100
committerGavin Andresen <gavinandresen@gmail.com>2013-01-23 10:41:44 -0500
commit960797a0de24454ce0c8c15cbb26cb6fc7683e47 (patch)
treece8c663003e6eaed8cf7385f4523461af275aed5 /src/leveldb/port/port_win.h
parent21f2ae7563c8892cbb634ece6911de38dc7dff7c (diff)
downloadbitcoin-960797a0de24454ce0c8c15cbb26cb6fc7683e47.tar.xz
Pre-Vista leveldb::port::InitOnce implementation
Diffstat (limited to 'src/leveldb/port/port_win.h')
-rw-r--r--src/leveldb/port/port_win.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/leveldb/port/port_win.h b/src/leveldb/port/port_win.h
index c9e1cdad60..849b01705f 100644
--- a/src/leveldb/port/port_win.h
+++ b/src/leveldb/port/port_win.h
@@ -93,8 +93,26 @@ class CondVar {
};
-typedef void* OnceType;
-#define LEVELDB_ONCE_INIT 0
+class OnceType {
+public:
+// OnceType() : init_(false) {}
+ OnceType(const OnceType &once) : init_(once.init_) {}
+ OnceType(bool f) : init_(f) {}
+ void InitOnce(void (*initializer)()) {
+ mutex_.Lock();
+ if (!init_) {
+ init_ = true;
+ initializer();
+ }
+ mutex_.Unlock();
+ }
+
+private:
+ bool init_;
+ Mutex mutex_;
+};
+
+#define LEVELDB_ONCE_INIT false
extern void InitOnce(port::OnceType*, void (*initializer)());
// Storage for a lock-free pointer