Remove advertiser during unregistration
When advertiser is being unregistered in non-regular flow, i.e. due to
failure to start advertising, or when started with timeout, remove
client instance from map.
Bug: 34440704
Test: sl4a ConcurrentBleAdvertising:test_timeout
Change-Id: Id3bb43e0412238bb5e465faaf51892770cad0e24
diff --git a/src/com/android/bluetooth/gatt/AdvertiseManager.java b/src/com/android/bluetooth/gatt/AdvertiseManager.java
index 40313a6..9780d7b 100644
--- a/src/com/android/bluetooth/gatt/AdvertiseManager.java
+++ b/src/com/android/bluetooth/gatt/AdvertiseManager.java
@@ -147,7 +147,7 @@
}
}
- private AdvertiseClient getAdvertiseClient(int clientIf) {
+ public AdvertiseClient getAdvertiseClient(int clientIf) {
for (AdvertiseClient client : mAdvertiseClients) {
if (client.clientIf == clientIf) {
return client;
diff --git a/src/com/android/bluetooth/gatt/GattService.java b/src/com/android/bluetooth/gatt/GattService.java
index d231f0f..a406b40 100644
--- a/src/com/android/bluetooth/gatt/GattService.java
+++ b/src/com/android/bluetooth/gatt/GattService.java
@@ -1391,6 +1391,12 @@
if (DBG) Log.d(TAG, "unregisterClient() - clientIf=" + clientIf);
mClientMap.remove(clientIf);
+
+ AdvertiseClient client = mAdvertiseManager.getAdvertiseClient(clientIf);
+ if (client != null && !client.appDied) {
+ stopMultiAdvertising(client);
+ }
+
gattClientUnregisterAppNative(clientIf);
}