Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8b1243e5 authored by Jared Suttles's avatar Jared Suttles Committed by Mike Lockwood
Browse files

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: default avatarFred Fettinger <fred.fettinger@motorola.com>
Signed-off-by: default avatarJared Suttles <jared.suttles@motorola.com>
Signed-off-by: default avatarMike Lockwood <lockwood@android.com>
parent 0d72f7e9
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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);
    while (sPendingCallbacks == 0) {
        pthread_cond_wait(&sEventCond, &sEventMutex);
    }

    // copy and clear the callback flags
    int pendingCallbacks = sPendingCallbacks;