aboutsummaryrefslogtreecommitdiff
path: root/src/leveldb/port/port_posix.cc
diff options
context:
space:
mode:
authorPieter Wuille <pieter.wuille@gmail.com>2012-10-20 14:49:33 -0700
committerPieter Wuille <pieter.wuille@gmail.com>2012-10-20 14:49:33 -0700
commitcf9b49fa50f439e57896ce2c176214052833a09a (patch)
tree7c0df7313bf492b67bd629a01d28074f22af4104 /src/leveldb/port/port_posix.cc
parent38ac953b9df1f7a884c1ef0e94301e14c4e7477d (diff)
parent4ca60bba5c3b8394c252715c71e8758d63c316ee (diff)
Merge pull request #1677 from sipa/ultraprune
Ultraprune: use a pruned-txout-set database for block validation
Diffstat (limited to 'src/leveldb/port/port_posix.cc')
-rw-r--r--src/leveldb/port/port_posix.cc54
1 files changed, 54 insertions, 0 deletions
diff --git a/src/leveldb/port/port_posix.cc b/src/leveldb/port/port_posix.cc
new file mode 100644
index 0000000000..5ba127a5b9
--- /dev/null
+++ b/src/leveldb/port/port_posix.cc
@@ -0,0 +1,54 @@
+// 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.
+
+#include "port/port_posix.h"
+
+#include <cstdlib>
+#include <stdio.h>
+#include <string.h>
+#include "util/logging.h"
+
+namespace leveldb {
+namespace port {
+
+static void PthreadCall(const char* label, int result) {
+ if (result != 0) {
+ fprintf(stderr, "pthread %s: %s\n", label, strerror(result));
+ abort();
+ }
+}
+
+Mutex::Mutex() { PthreadCall("init mutex", pthread_mutex_init(&mu_, NULL)); }
+
+Mutex::~Mutex() { PthreadCall("destroy mutex", pthread_mutex_destroy(&mu_)); }
+
+void Mutex::Lock() { PthreadCall("lock", pthread_mutex_lock(&mu_)); }
+
+void Mutex::Unlock() { PthreadCall("unlock", pthread_mutex_unlock(&mu_)); }
+
+CondVar::CondVar(Mutex* mu)
+ : mu_(mu) {
+ PthreadCall("init cv", pthread_cond_init(&cv_, NULL));
+}
+
+CondVar::~CondVar() { PthreadCall("destroy cv", pthread_cond_destroy(&cv_)); }
+
+void CondVar::Wait() {
+ PthreadCall("wait", pthread_cond_wait(&cv_, &mu_->mu_));
+}
+
+void CondVar::Signal() {
+ PthreadCall("signal", pthread_cond_signal(&cv_));
+}
+
+void CondVar::SignalAll() {
+ PthreadCall("broadcast", pthread_cond_broadcast(&cv_));
+}
+
+void InitOnce(OnceType* once, void (*initializer)()) {
+ PthreadCall("once", pthread_once(once, initializer));
+}
+
+} // namespace port
+} // namespace leveldb