Index: base/android/java_handler_thread.cc |
diff --git a/base/android/java_handler_thread.cc b/base/android/java_handler_thread.cc |
index 18e1440ee5cdfc33429ae5515be88164d55de3ec..117971eda5d0674468e96325d8da9286c9f20088 100644 |
--- a/base/android/java_handler_thread.cc |
+++ b/base/android/java_handler_thread.cc |
@@ -44,6 +44,15 @@ void JavaHandlerThread::Start() { |
} |
void JavaHandlerThread::Stop() { |
+ JNIEnv* env = base::android::AttachCurrentThread(); |
+ base::WaitableEvent shutdown_event(false, false); |
+ Java_JavaHandlerThread_stop(env, |
+ java_thread_.obj(), |
+ reinterpret_cast<intptr_t>(this), |
+ reinterpret_cast<intptr_t>(&shutdown_event)); |
+ // Wait for thread to shut down before returning. |
+ base::ThreadRestrictions::ScopedAllowWait wait_allowed; |
+ shutdown_event.Wait(); |
} |
void JavaHandlerThread::InitializeThread(JNIEnv* env, jobject obj, |
@@ -54,6 +63,11 @@ void JavaHandlerThread::InitializeThread(JNIEnv* env, jobject obj, |
reinterpret_cast<base::WaitableEvent*>(event)->Signal(); |
} |
+void JavaHandlerThread::StopThread(JNIEnv* env, jobject obj, jlong event) { |
+ static_cast<MessageLoopForUI*>(message_loop_.get())->Quit(); |
+ reinterpret_cast<base::WaitableEvent*>(event)->Signal(); |
+} |
+ |
// static |
bool JavaHandlerThread::RegisterBindings(JNIEnv* env) { |
return RegisterNativesImpl(env); |