Index: third_party/re2/util/thread.cc |
diff --git a/third_party/re2/util/thread.cc b/third_party/re2/util/thread.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7349991530a57011b46b00e5591e229c3797e052 |
--- /dev/null |
+++ b/third_party/re2/util/thread.cc |
@@ -0,0 +1,44 @@ |
+// Copyright 2009 The RE2 Authors. All Rights Reserved. |
+// Use of this source code is governed by a BSD-style |
+// license that can be found in the LICENSE file. |
+ |
+#include <pthread.h> |
+ |
+#include "util/util.h" |
+#include "util/thread.h" |
+ |
+Thread::Thread() { |
+ pid_ = 0; |
+ running_ = 0; |
+ joinable_ = 0; |
+} |
+ |
+Thread::~Thread() { |
+} |
+ |
+void *startThread(void *v) { |
+ Thread* t = (Thread*)v; |
+ t->Run(); |
+ return 0; |
+} |
+ |
+void Thread::Start() { |
+ CHECK(!running_); |
+ pthread_create(&pid_, 0, startThread, this); |
+ running_ = true; |
+ if (!joinable_) |
+ pthread_detach(pid_); |
+} |
+ |
+void Thread::Join() { |
+ CHECK(running_); |
+ CHECK(joinable_); |
+ void *val; |
+ pthread_join(pid_, &val); |
+ running_ = 0; |
+} |
+ |
+void Thread::SetJoinable(bool j) { |
+ CHECK(!running_); |
+ joinable_ = j; |
+} |