@@ -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