Loading include/utils/threads.h +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading libs/utils/Threads.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
include/utils/threads.h +4 −0 Original line number Diff line number Diff line Loading @@ -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; Loading
libs/utils/Threads.cpp +19 −0 Original line number Diff line number Diff line Loading @@ -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