From 37cd89f0032e0f8df499e0047ffcc5ae133e6d2a Mon Sep 17 00:00:00 2001 From: Claudio Takahasi Date: Tue, 12 Jul 2011 16:10:09 -0300 Subject: [PATCH] Set primary services before probing Fix accessing primary services data in the probing function of GATT based plugins. --- src/adapter.c | 6 ++++-- src/device.c | 9 ++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/adapter.c b/src/adapter.c index 9fadc1c0a..df06d1d58 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -1877,11 +1877,12 @@ static void create_stored_device_from_profiles(char *key, char *value, device_set_temporary(device, FALSE); adapter->devices = g_slist_append(adapter->devices, device); - device_probe_drivers(device, uuids); list = device_services_from_record(device, uuids); if (list) device_register_services(connection, device, list, ATT_PSM); + device_probe_drivers(device, uuids); + g_slist_free_full(uuids, g_free); } @@ -2052,9 +2053,10 @@ static void create_stored_device_from_primary(char *key, char *value, uuids = g_slist_append(uuids, prim->uuid); } - device_probe_drivers(device, uuids); device_register_services(connection, device, services, -1); + device_probe_drivers(device, uuids); + g_slist_free(uuids); } diff --git a/src/device.c b/src/device.c index b7a3e92d6..7b36f5b5d 100644 --- a/src/device.c +++ b/src/device.c @@ -1426,12 +1426,12 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data) if (req->profiles_added) { GSList *list; - device_probe_drivers(device, req->profiles_added); - list = device_services_from_record(device, req->profiles_added); if (list) device_register_services(req->conn, device, list, ATT_PSM); + + device_probe_drivers(device, req->profiles_added); } /* Remove drivers for services removed */ @@ -1587,9 +1587,8 @@ static void primary_cb(GSList *services, guint8 status, gpointer user_data) uuids = g_slist_append(uuids, prim->uuid); } - device_probe_drivers(device, uuids); - device_register_services(req->conn, device, g_slist_copy(services), -1); + device_probe_drivers(device, uuids); g_slist_free(uuids); @@ -2340,9 +2339,9 @@ void device_set_authorizing(struct btd_device *device, gboolean auth) void device_register_services(DBusConnection *conn, struct btd_device *device, GSList *prim_list, int psm) { + device->primaries = g_slist_concat(device->primaries, prim_list); device->services = attrib_client_register(conn, device, psm, NULL, prim_list); - device->primaries = g_slist_concat(device->primaries, prim_list); } GSList *btd_device_get_primaries(struct btd_device *device) -- 2.47.3