From ff00649efa3b1d128404de7a0b338134623db7ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Rebelo?= Date: Sat, 30 May 2026 00:57:39 +0100 Subject: [PATCH] BtBRQueue: Fix WAITING_FOR_RECONNECT state leak after dispose When BT was turned off while a device was mid-connect, BtBRQueue would end up in WAITING_FOR_RECONNECT even though the queue had been disposed, causing AutoConnectIntervalReceiver to schedule reconnects even while bluetooth is already off. --- .../freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java index 5002cbda3d..ad3fb48e2e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/btbr/BtBRQueue.java @@ -186,7 +186,7 @@ public final class BtBRQueue { cleanup(); - if (!GBApplication.getPrefs().getAutoReconnect(mGbDevice)) { + if (mDisposed.get() || !GBApplication.getPrefs().getAutoReconnect(mGbDevice)) { mGbDevice.setUpdateState(GBDevice.State.NOT_CONNECTED, mContext); } else { mGbDevice.setUpdateState(GBDevice.State.WAITING_FOR_RECONNECT, mContext); @@ -196,7 +196,7 @@ public final class BtBRQueue { cleanup(); - if (!GBApplication.getPrefs().getAutoReconnect(mGbDevice)) { + if (mDisposed.get() || !GBApplication.getPrefs().getAutoReconnect(mGbDevice)) { mGbDevice.setUpdateState(GBDevice.State.NOT_CONNECTED, mContext); } else { mGbDevice.setUpdateState(GBDevice.State.WAITING_FOR_RECONNECT, mContext); @@ -298,7 +298,7 @@ public final class BtBRQueue { LOG.debug("finished thread {}", mWriteHandlerThread.getName()); } - if (mBtSocket != null && mBtSocket.isConnected()) { + if (mBtSocket != null) { try { mBtSocket.close(); } catch (IOException e) {