From 8c925d27626651a35ebf701af4a0afa1fe3bb543 Mon Sep 17 00:00:00 2001 From: junyulai Date: Thu, 17 Jan 2019 15:15:45 +0800 Subject: [PATCH] Remove dead KeepaliveInfo if it cannot be started If KeepaliveInfo was created but cannot be started, current design will only notify apps but not remove it from local hashmap, which will cause unexpected behavior if someone tries to iterate records and fire callbacks. Bug: 122636283 Test: atest FrameworksNetTests Change-Id: If4cb25a881dd3555f569c729f88741675f7f3bdf --- .../com/android/server/connectivity/KeepaliveTracker.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java index 0f8fc17047..8a3cdcad02 100644 --- a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java +++ b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java @@ -185,13 +185,13 @@ public class KeepaliveTracker { } void start(int slot) { + mSlot = slot; int error = isValid(); if (error == SUCCESS) { - mSlot = slot; Log.d(TAG, "Starting keepalive " + mSlot + " on " + mNai.name()); mNai.asyncChannel.sendMessage(CMD_START_PACKET_KEEPALIVE, slot, mInterval, mPacket); } else { - notifyMessenger(NO_KEEPALIVE, error); + handleStopKeepalive(mNai, mSlot, error); return; } } @@ -277,6 +277,7 @@ public class KeepaliveTracker { return; } ki.stop(reason); + Log.d(TAG, "Stopped keepalive " + slot + " on " + networkName); networkKeepalives.remove(slot); if (networkKeepalives.isEmpty()) { mKeepalives.remove(nai);