shared/gatt-client: Fix tracking current service during discovery
We should mark service as completed before trying to insert another
characteristic - in case inserting characteristic for new service
fails, previous one won't be discarded.
diff --git a/src/shared/gatt-client.c b/src/shared/gatt-client.c
index b7cf918..5721f3e 100644
--- a/src/shared/gatt-client.c
+++ b/src/shared/gatt-client.c
@@ -588,6 +588,19 @@
struct gatt_db_attribute *svc;
uint16_t start, end;
+ /* Adjust current service */
+ svc = gatt_db_get_service(client->db, chrc_data->value_handle);
+ if (op->cur_svc != svc) {
+ if (op->cur_svc) {
+ queue_remove(op->pending_svcs, op->cur_svc);
+
+ /* Done with the current service */
+ gatt_db_service_set_active(op->cur_svc, true);
+ }
+
+ op->cur_svc = svc;
+ }
+
attr = gatt_db_insert_characteristic(client->db,
chrc_data->value_handle,
&chrc_data->uuid, 0,
@@ -605,19 +618,6 @@
chrc_data->value_handle)
goto failed;
- /* Adjust current service */
- svc = gatt_db_get_service(client->db, chrc_data->value_handle);
- if (op->cur_svc != svc) {
- if (op->cur_svc) {
- queue_remove(op->pending_svcs, op->cur_svc);
-
- /* Done with the current service */
- gatt_db_service_set_active(op->cur_svc, true);
- }
-
- op->cur_svc = svc;
- }
-
gatt_db_attribute_get_service_handles(svc, &start, &end);
/*