libutils: Fix race condition in Thread::requestExitAndWait()

Hold a reference to the thread in requestExitAndWait() so the
condition variable it is waiting on will not be destroyed before
its wait() call returns.

Change-Id: If8b6cf84117203926a4180f43f0224469e92a500
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/libs/utils/Threads.cpp b/libs/utils/Threads.cpp
index ad9a94f..00d009b 100644
--- a/libs/utils/Threads.cpp
+++ b/libs/utils/Threads.cpp
@@ -799,6 +799,9 @@
 
 status_t Thread::requestExitAndWait()
 {
+    // hold a reference so mThreadExitedCondition is not destroyed before wait() returns
+    sp<Thread> strong(mHoldSelf);
+
     if (mThread == getThreadId()) {
         LOGW(
         "Thread (this=%p): don't call waitForExit() from this "