From: Archie Pusaka <apusaka@xxxxxxxxxxxx> If adapter is powered off when a device is being removed, there is a possibility that the kernel couldn't clean the device's information, for example the pairing information. This causes the kernel to disagree with the user space about whether the device is paired. Therefore, to avoid discrepancy we must not proceed to remove the device within the user space as well. Reviewed-by: Daniel Winkler <danielwinkler@xxxxxxxxxx> --- src/adapter.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/adapter.c b/src/adapter.c index ec6a6a64c5..a2abc46706 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -1238,6 +1238,14 @@ void btd_adapter_remove_device(struct btd_adapter *adapter, { GList *l; + /* Test if adapter is or will be powered off. + * This is to prevent removing the device information only on user + * space, but failing to do so on the kernel. + */ + if (!(adapter->current_settings & MGMT_SETTING_POWERED) || + (adapter->pending_settings & MGMT_SETTING_POWERED)) + return; + adapter->connect_list = g_slist_remove(adapter->connect_list, dev); adapter->devices = g_slist_remove(adapter->devices, dev); -- 2.29.2.729.g45daf8777d-goog