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 <fred.fettinger@motorola.com> Signed-off-by: Jared Suttles <jared.suttles@motorola.com> Signed-off-by: Mike Lockwood <lockwood@android.com>
This commit is contained in:
committed by
Mike Lockwood
parent
0d72f7e9fc
commit
8b1243e5e4
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user