Loading android/app/src/com/android/bluetooth/gatt/AdvertiseManager.java +34 −12 Original line number Diff line number Diff line Loading @@ -31,9 +31,9 @@ import android.os.RemoteException; import android.util.Log; import com.android.bluetooth.btservice.AdapterService; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.Collections; import java.util.HashMap; import java.util.Map; Loading @@ -47,8 +47,11 @@ public class AdvertiseManager { private final GattService mService; private final AdvertiseManagerNativeInterface mNativeInterface; private final AdvertiserMap mAdvertiserMap; @GuardedBy("itself") private final Map<IBinder, AdvertiserInfo> mAdvertisers = new HashMap<>(); private Handler mHandler; Map<IBinder, AdvertiserInfo> mAdvertisers = Collections.synchronizedMap(new HashMap<>()); static int sTempRegistrationId = -1; AdvertiseManager(GattService service) { Loading Loading @@ -81,7 +84,9 @@ public class AdvertiseManager { void cleanup() { Log.d(TAG, "cleanup()"); mNativeInterface.cleanup(); synchronized (mAdvertisers) { mAdvertisers.clear(); } sTempRegistrationId = -1; if (mHandler != null) { Loading Loading @@ -138,12 +143,14 @@ public class AdvertiseManager { Map.Entry<IBinder, AdvertiserInfo> findAdvertiser(int advertiserId) { Map.Entry<IBinder, AdvertiserInfo> entry = null; synchronized (mAdvertisers) { for (Map.Entry<IBinder, AdvertiserInfo> e : mAdvertisers.entrySet()) { if (e.getValue().id == advertiserId) { entry = e; break; } } } return entry; } Loading Loading @@ -176,11 +183,17 @@ public class AdvertiseManager { } else { IBinder binder = entry.getKey(); binder.unlinkToDeath(entry.getValue().deathRecipient, 0); synchronized (mAdvertisers) { mAdvertisers.remove(binder); } AppAdvertiseStats stats = mAdvertiserMap.getAppAdvertiseStatsById(regId); if (stats != null) { stats.recordAdvertiseStop(mAdvertisers.size()); int instanceCount; synchronized (mAdvertisers) { instanceCount = mAdvertisers.size(); } stats.recordAdvertiseStop(instanceCount); stats.recordAdvertiseErrorCount(status); } mAdvertiserMap.removeAppAdvertiseStats(regId); Loading Loading @@ -215,7 +228,11 @@ public class AdvertiseManager { if (!enable && status != 0) { AppAdvertiseStats stats = mAdvertiserMap.getAppAdvertiseStatsById(advertiserId); if (stats != null) { stats.recordAdvertiseStop(mAdvertisers.size()); int instanceCount; synchronized (mAdvertisers) { instanceCount = mAdvertisers.size(); } stats.recordAdvertiseStop(instanceCount); } } } Loading Loading @@ -271,7 +288,9 @@ public class AdvertiseManager { AdvertiseHelper.advertiseDataToBytes(periodicData, deviceName); int cbId = --sTempRegistrationId; synchronized (mAdvertisers) { mAdvertisers.put(binder, new AdvertiserInfo(cbId, deathRecipient, callback)); } Log.d(TAG, "startAdvertisingSet() - reg_id=" + cbId + ", callback: " + binder); Loading Loading @@ -336,7 +355,10 @@ public class AdvertiseManager { IBinder binder = toBinder(callback); Log.d(TAG, "stopAdvertisingSet() " + binder); AdvertiserInfo adv = mAdvertisers.remove(binder); AdvertiserInfo adv; synchronized (mAdvertisers) { adv = mAdvertisers.remove(binder); } if (adv == null) { Log.e(TAG, "stopAdvertisingSet() - no client found for callback"); return; Loading Loading
android/app/src/com/android/bluetooth/gatt/AdvertiseManager.java +34 −12 Original line number Diff line number Diff line Loading @@ -31,9 +31,9 @@ import android.os.RemoteException; import android.util.Log; import com.android.bluetooth.btservice.AdapterService; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import java.util.Collections; import java.util.HashMap; import java.util.Map; Loading @@ -47,8 +47,11 @@ public class AdvertiseManager { private final GattService mService; private final AdvertiseManagerNativeInterface mNativeInterface; private final AdvertiserMap mAdvertiserMap; @GuardedBy("itself") private final Map<IBinder, AdvertiserInfo> mAdvertisers = new HashMap<>(); private Handler mHandler; Map<IBinder, AdvertiserInfo> mAdvertisers = Collections.synchronizedMap(new HashMap<>()); static int sTempRegistrationId = -1; AdvertiseManager(GattService service) { Loading Loading @@ -81,7 +84,9 @@ public class AdvertiseManager { void cleanup() { Log.d(TAG, "cleanup()"); mNativeInterface.cleanup(); synchronized (mAdvertisers) { mAdvertisers.clear(); } sTempRegistrationId = -1; if (mHandler != null) { Loading Loading @@ -138,12 +143,14 @@ public class AdvertiseManager { Map.Entry<IBinder, AdvertiserInfo> findAdvertiser(int advertiserId) { Map.Entry<IBinder, AdvertiserInfo> entry = null; synchronized (mAdvertisers) { for (Map.Entry<IBinder, AdvertiserInfo> e : mAdvertisers.entrySet()) { if (e.getValue().id == advertiserId) { entry = e; break; } } } return entry; } Loading Loading @@ -176,11 +183,17 @@ public class AdvertiseManager { } else { IBinder binder = entry.getKey(); binder.unlinkToDeath(entry.getValue().deathRecipient, 0); synchronized (mAdvertisers) { mAdvertisers.remove(binder); } AppAdvertiseStats stats = mAdvertiserMap.getAppAdvertiseStatsById(regId); if (stats != null) { stats.recordAdvertiseStop(mAdvertisers.size()); int instanceCount; synchronized (mAdvertisers) { instanceCount = mAdvertisers.size(); } stats.recordAdvertiseStop(instanceCount); stats.recordAdvertiseErrorCount(status); } mAdvertiserMap.removeAppAdvertiseStats(regId); Loading Loading @@ -215,7 +228,11 @@ public class AdvertiseManager { if (!enable && status != 0) { AppAdvertiseStats stats = mAdvertiserMap.getAppAdvertiseStatsById(advertiserId); if (stats != null) { stats.recordAdvertiseStop(mAdvertisers.size()); int instanceCount; synchronized (mAdvertisers) { instanceCount = mAdvertisers.size(); } stats.recordAdvertiseStop(instanceCount); } } } Loading Loading @@ -271,7 +288,9 @@ public class AdvertiseManager { AdvertiseHelper.advertiseDataToBytes(periodicData, deviceName); int cbId = --sTempRegistrationId; synchronized (mAdvertisers) { mAdvertisers.put(binder, new AdvertiserInfo(cbId, deathRecipient, callback)); } Log.d(TAG, "startAdvertisingSet() - reg_id=" + cbId + ", callback: " + binder); Loading Loading @@ -336,7 +355,10 @@ public class AdvertiseManager { IBinder binder = toBinder(callback); Log.d(TAG, "stopAdvertisingSet() " + binder); AdvertiserInfo adv = mAdvertisers.remove(binder); AdvertiserInfo adv; synchronized (mAdvertisers) { adv = mAdvertisers.remove(binder); } if (adv == null) { Log.e(TAG, "stopAdvertisingSet() - no client found for callback"); return; Loading