Skip to content

Commit 790c37c

Browse files
authored
Merge pull request #579 from NordicSemiconductor/bugfix/concurrent-modification
#548 fixed by adding synchronized blocks
2 parents 535a2ac + 57acae7 commit 790c37c

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

ble/src/main/java/no/nordicsemi/android/ble/BleManagerHandler.java

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1451,7 +1451,9 @@ ValueChangedCallback getValueChangedCallback(@Nullable final Object attribute) {
14511451
if (callback == null) {
14521452
callback = new ValueChangedCallback(this);
14531453
if (attribute != null) {
1454-
valueChangedCallbacks.put(attribute, callback);
1454+
synchronized (valueChangedCallbacks) {
1455+
valueChangedCallbacks.put(attribute, callback);
1456+
}
14551457
}
14561458
} else if (bluetoothDevice != null) {
14571459
callback.notifyClosed();
@@ -1466,9 +1468,11 @@ ValueChangedCallback getValueChangedCallback(@Nullable final Object attribute) {
14661468
* @param attribute attribute to unbind the callback from.
14671469
*/
14681470
void removeValueChangedCallback(@Nullable final Object attribute) {
1469-
final ValueChangedCallback callback = valueChangedCallbacks.remove(attribute);
1470-
if (callback != null) {
1471-
callback.notifyClosed();
1471+
synchronized (valueChangedCallbacks) {
1472+
final ValueChangedCallback callback = valueChangedCallbacks.remove(attribute);
1473+
if (callback != null) {
1474+
callback.notifyClosed();
1475+
}
14721476
}
14731477
}
14741478

@@ -1976,10 +1980,12 @@ void notifyDeviceDisconnected(@NonNull final BluetoothDevice device, final int s
19761980
// automatically.
19771981
// This may be only called when the shouldAutoConnect() method returned true.
19781982
}
1979-
for (final ValueChangedCallback callback : valueChangedCallbacks.values()) {
1980-
callback.notifyClosed();
1983+
synchronized (valueChangedCallbacks) {
1984+
for (final ValueChangedCallback callback : valueChangedCallbacks.values()) {
1985+
callback.notifyClosed();
1986+
}
1987+
valueChangedCallbacks.clear();
19811988
}
1982-
valueChangedCallbacks.clear();
19831989
dataProviders.clear();
19841990
batteryLevelNotificationCallback = null;
19851991
batteryValue = -1;

0 commit comments

Comments
 (0)