From c0499c5b6d77c8796f8f94c98c1b636cf1d89fd8 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);