Diff between 247aa7074a41e3b4fe0d86200fbd9c87f32c7837 and a65ea4e54ffa2ddee15d4e35d77bdc0eb2d11eb2

Changed Files

File Additions Deletions Status
src/shared/gatt-client.c +15 -29 modified

Full Patch

diff --git a/src/shared/gatt-client.c b/src/shared/gatt-client.c
index 5ee753e..f33d8c9 100644
--- a/src/shared/gatt-client.c
+++ b/src/shared/gatt-client.c
@@ -1815,47 +1815,32 @@ static bool cancel_prep_write_session(struct bt_gatt_client *client,
 							req, request_unref);
 }
 
-bool bt_gatt_client_cancel(struct bt_gatt_client *client, unsigned int id)
+static bool cancel_request(struct request *req)
 {
-	struct request *req;
-
-	if (!client || !id || !client->att)
-		return false;
-
-	req = queue_remove_if(client->pending_requests, match_req_id,
-							UINT_TO_PTR(id));
-	if (!req)
-		return false;
-
 	req->removed = true;
 
-	if (!bt_att_cancel(client->att, req->att_id) && !req->long_write &&
-							!req->prep_write)
-		return false;
-
-	/* If this was a long-write, we need to abort all prepared writes */
 	if (req->long_write)
-		return cancel_long_write_req(client, req);
+		return cancel_long_write_req(req->client, req);
 
 	if (req->prep_write)
-		return cancel_prep_write_session(client, req);
+		return cancel_prep_write_session(req->client, req);
 
-	return true;
+	return bt_att_cancel(req->client->att, req->att_id);
 }
 
-static void cancel_request(void *data)
+bool bt_gatt_client_cancel(struct bt_gatt_client *client, unsigned int id)
 {
-	struct request *req = data;
-
-	req->removed = true;
+	struct request *req;
 
-	bt_att_cancel(req->client->att, req->att_id);
+	if (!client || !id || !client->att)
+		return false;
 
-	if (req->long_write)
-		cancel_long_write_req(req->client, req);
+	req = queue_remove_if(client->pending_requests, match_req_id,
+							UINT_TO_PTR(id));
+	if (!req)
+		return false;
 
-	if (req->prep_write)
-		cancel_prep_write_session(req->client, req);
+	return cancel_request(req);
 }
 
 bool bt_gatt_client_cancel_all(struct bt_gatt_client *client)
@@ -1863,7 +1848,8 @@ bool bt_gatt_client_cancel_all(struct bt_gatt_client *client)
 	if (!client || !client->att)
 		return false;
 
-	queue_remove_all(client->pending_requests, NULL, NULL, cancel_request);
+	queue_remove_all(client->pending_requests, NULL, NULL,
+					(queue_destroy_func_t) cancel_request);
 
 	if (client->discovery_req) {
 		bt_gatt_request_cancel(client->discovery_req);