@@ -1420,8 +1420,6 @@ static void adapter_remove_device(struct btd_adapter *adapter,
void btd_adapter_remove_device(struct btd_adapter *adapter,
struct btd_device *dev)
{
- GList *l;
-
adapter->connect_list = g_slist_remove(adapter->connect_list, dev);
adapter_remove_device(adapter, dev);
@@ -1435,22 +1433,7 @@ void btd_adapter_remove_device(struct btd_adapter *adapter,
if (adapter->connect_le == dev)
adapter->connect_le = NULL;
- l = adapter->auths->head;
- while (l != NULL) {
- struct service_auth *auth = l->data;
- GList *next = g_list_next(l);
-
- if (auth->device != dev) {
- l = next;
- continue;
- }
-
- g_queue_delete_link(adapter->auths, l);
- l = next;
-
- service_auth_cancel(auth);
- }
-
+ btd_adapter_cancel_service_auth(adapter, dev);
device_remove(dev, TRUE);
}
@@ -7538,8 +7521,7 @@ static void adapter_remove_connection(struct btd_adapter *adapter,
device_remove_connection(device, bdaddr_type, &remove_device);
- if (device_is_authenticating(device))
- device_cancel_authentication(device, TRUE);
+ device_cancel_authentication(device, TRUE);
/* If another bearer is still connected */
if (btd_device_bearer_is_connected(device))
@@ -10905,3 +10887,25 @@ bool btd_adapter_has_exp_feature(struct btd_adapter *adapter, uint32_t feature)
return false;
}
+
+void btd_adapter_cancel_service_auth(struct btd_adapter *adapter,
+ struct btd_device *device)
+{
+ GList *l;
+
+ l = adapter->auths->head;
+ while (l != NULL) {
+ struct service_auth *auth = l->data;
+ GList *next = g_list_next(l);
+
+ if (auth->device != device) {
+ l = next;
+ continue;
+ }
+
+ g_queue_delete_link(adapter->auths, l);
+ l = next;
+
+ service_auth_cancel(auth);
+ }
+}
@@ -298,3 +298,5 @@ void btd_adapter_store_conn_param(struct btd_adapter *adapter,
const bdaddr_t *peer, uint8_t bdaddr_type,
uint16_t min_interval, uint16_t max_interval,
uint16_t latency, uint16_t timeout);
+void btd_adapter_cancel_service_auth(struct btd_adapter *adapter,
+ struct btd_device *device);
@@ -7038,6 +7038,9 @@ void device_cancel_authentication(struct btd_device *device, gboolean aborted)
struct authentication_req *auth = device->authr;
char addr[18];
+ if (device->adapter)
+ btd_adapter_cancel_service_auth(device->adapter, device);
+
if (!auth)
return;