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);
     }