Merge "Add Thread::join"

This commit is contained in:
Glenn Kasten 2011-07-06 11:37:53 -07:00 committed by Android (Google) Code Review
commit be3c018f8b
2 changed files with 23 additions and 0 deletions

View File

@ -510,6 +510,10 @@ public:
// that case.
status_t requestExitAndWait();
// Wait until this object's thread exits. Returns immediately if not yet running.
// Do not call from this object's thread; will return WOULD_BLOCK in that case.
status_t join();
protected:
// exitPending() returns true if requestExit() has been called.
bool exitPending() const;

View File

@ -846,6 +846,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);