Fix race condition in thread creation

There is a race condition in thread creation in initializer list of a
class. If the thread is created in initializer list of a class, it must
be the last member variable of the class, as the thread is trying to
access some of the member variables in the thread which might not be
initialized yet.

There are two ways to fix this. One is to move the thread creation to
the constructor which all member variables of the class will be
initialized by that time or need to ensure the mThread variable is the
last variable of the class and the last one in the initializer list.

Bug: 235136279
Test: build
Change-Id: Iafb48377e29580cdfb30bedbd9e49c4b1ff6a148
Merged-In: Iafb48377e29580cdfb30bedbd9e49c4b1ff6a148
diff --git a/media/libheadtracking/SensorPoseProvider.cpp b/media/libheadtracking/SensorPoseProvider.cpp
index 8ebaf6e..e5e1521 100644
--- a/media/libheadtracking/SensorPoseProvider.cpp
+++ b/media/libheadtracking/SensorPoseProvider.cpp
@@ -174,7 +174,6 @@
     sp<Looper> mLooper;
     Listener* const mListener;
     SensorManager* const mSensorManager;
-    std::thread mThread;
     std::mutex mMutex;
     std::map<int32_t, SensorEnableGuard> mEnabledSensors;
     std::map<int32_t, SensorExtra> mEnabledSensorsExtra GUARDED_BY(mMutex);
@@ -187,11 +186,13 @@
     // the worker thread and that thread would notify, via the promise below whenever initialization
     // is finished, and whether it was successful.
     std::promise<bool> mInitPromise;
+    std::thread mThread;
 
     SensorPoseProviderImpl(const char* packageName, Listener* listener)
         : mListener(listener),
-          mSensorManager(&SensorManager::getInstanceForPackage(String16(packageName))),
-          mThread([this] { threadFunc(); }) {}
+          mSensorManager(&SensorManager::getInstanceForPackage(String16(packageName))) {
+        mThread = std::thread([this] { threadFunc(); });
+    }
 
     void initFinished(bool success) { mInitPromise.set_value(success); }