From 8b1243e5e4930598e8e78ebd18e7b6cd6fb0445f Mon Sep 17 00:00:00 2001 From: Jared Suttles Date: Wed, 4 Nov 2009 16:53:44 -0600 Subject: [PATCH] jni: GpsLocationProvider: Check for pending callbacks before waiting This change fixes a corner case where a callback may not get handled until a second callback arrives. This can happen because there is a significant section of the wait_for_event function where the mutex is not locked, and the sPendingCallbacks member could be updated. We now check to see if there is a pending callback to handle before we wait for another callback. Change-Id: I20cfae1e780944bb74133940dda032efc4c55540 Signed-off-by: Fred Fettinger Signed-off-by: Jared Suttles Signed-off-by: Mike Lockwood --- core/jni/android_location_GpsLocationProvider.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/jni/android_location_GpsLocationProvider.cpp b/core/jni/android_location_GpsLocationProvider.cpp index 4aed277d2a19..f84587818ecc 100755 --- a/core/jni/android_location_GpsLocationProvider.cpp +++ b/core/jni/android_location_GpsLocationProvider.cpp @@ -266,7 +266,9 @@ static void android_location_GpsLocationProvider_delete_aiding_data(JNIEnv* env, static void android_location_GpsLocationProvider_wait_for_event(JNIEnv* env, jobject obj) { pthread_mutex_lock(&sEventMutex); - pthread_cond_wait(&sEventCond, &sEventMutex); + while (sPendingCallbacks == 0) { + pthread_cond_wait(&sEventCond, &sEventMutex); + } // copy and clear the callback flags int pendingCallbacks = sPendingCallbacks; -- 2.11.0