Merge "Add Thread::join"
This commit is contained in:
commit
be3c018f8b
@ -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;
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user