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
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)
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);