summaryrefslogtreecommitdiffstats
path: root/libs/utils
diff options
context:
space:
mode:
authorGlenn Kasten <gkasten@google.com>2011-06-23 12:55:29 -0700
committerGlenn Kasten <gkasten@google.com>2011-06-23 12:55:29 -0700
commit697283e9177ee5730bf5c652c3c05d3aa3838ace (patch)
treea17ef92257437f6e130a2c73a53e92fc4bdca5a2 /libs/utils
parent0ff6d7ee17de33d314ef726e7506b39c64a3ed35 (diff)
downloadframeworks_base-697283e9177ee5730bf5c652c3c05d3aa3838ace.zip
frameworks_base-697283e9177ee5730bf5c652c3c05d3aa3838ace.tar.gz
frameworks_base-697283e9177ee5730bf5c652c3c05d3aa3838ace.tar.bz2
Add Thread::join
This new API will be used by applications that previously used the lower-level pthread APIs (including pthread_join). Centralizing on the Thread class instead of pthread will permit additional functionality to be added later in only one location. Change-Id: I8460169ac9c61ac9f85752405ed54c94651058d7
Diffstat (limited to 'libs/utils')
-rw-r--r--libs/utils/Threads.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp
index 15bb1d2..48ce5d1 100644
--- a/libs/utils/Threads.cpp
+++ b/libs/utils/Threads.cpp
@@ -842,6 +842,25 @@ status_t Thread::requestExitAndWait()
return mStatus;
}
+status_t Thread::join()
+{
+ Mutex::Autolock _l(mLock);
+ if (mThread == getThreadId()) {
+ LOGW(
+ "Thread (this=%p): don't call join() from this "
+ "Thread object's thread. It's a guaranteed deadlock!",
+ this);
+
+ return WOULD_BLOCK;
+ }
+
+ while (mRunning == true) {
+ mThreadExitedCondition.wait(mLock);
+ }
+
+ return mStatus;
+}
+
bool Thread::exitPending() const
{
Mutex::Autolock _l(mLock);