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

Commit 41ae5d5a authored by Joshua Bartel's avatar Joshua Bartel Committed by Android Git Automerger
Browse files

am bd324c9b: Merge change I50a321c9 into eclair

Merge commit 'bd324c9b' into eclair-mr2

* commit 'bd324c9b':
  LocationManagerService: Fix race when removing LocationListener
parents cd74c0d5 bd324c9b
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -382,7 +382,12 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
    }

    public void locationCallbackFinished(ILocationListener listener) {
        Receiver receiver = getReceiver(listener);
        //Do not use getReceiver here as that will add the ILocationListener to
        //the receiver list if it is not found.  If it is not found then the
        //LocationListener was removed when it had a pending broadcast and should
        //not be added back.
        IBinder binder = listener.asBinder();
        Receiver receiver = mReceivers.get(binder);
        if (receiver != null) {
            synchronized (receiver) {
                // so wakelock calls will succeed
@@ -921,6 +926,12 @@ public class LocationManagerService extends ILocationManager.Stub implements Run
        try {
            if (mReceivers.remove(receiver.mKey) != null && receiver.isListener()) {
                receiver.getListener().asBinder().unlinkToDeath(receiver, 0);
                synchronized(receiver) {
                    if(receiver.mPendingBroadcasts > 0) {
                        decrementPendingBroadcasts();
                        receiver.mPendingBroadcasts = 0;
                    }
                }
            }

            // Record which providers were associated with this listener