diff --git a/media/jni/soundpool/StreamManager.h b/media/jni/soundpool/StreamManager.h index 8c98ac992f75f..15b39f2df891f 100644 --- a/media/jni/soundpool/StreamManager.h +++ b/media/jni/soundpool/StreamManager.h @@ -52,6 +52,12 @@ public: JavaThread(JavaThread &&) = delete; // uses "this" ptr, not moveable. + ~JavaThread() { + join(); // manually block until the future is ready as std::future + // destructor doesn't block unless it comes from std::async + // and it is the last reference to shared state. + } + void join() const { mFuture.wait(); } @@ -64,8 +70,9 @@ private: static int staticFunction(void *data) { JavaThread *jt = static_cast(data); jt->mF(); - jt->mIsClosed = true; jt->mPromise.set_value(); + jt->mIsClosed = true; // publicly inform that we are closed + // after we have accessed all variables. return 0; }