Re: [PATCH] Update SDP storage records when a record is deleted.
From: Jaikumar Ganesh <hidden>
Date: 2009-10-23 15:17:51
Hi Luiz: On Fri, Oct 23, 2009 at 6:49 AM, Luiz Augusto von Dentz [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi, On Thu, Oct 22, 2009 at 8:19 PM, Jaikumar Ganesh [off-list ref] wrote:quoted
for (list = uuids; list; list = list->next) device->uuids = g_slist_remove(device->uuids, list->data);It looks like to me this would be the proper place to remove the records from the storage, since we are updating the uuids list there is no big deal to redo that in another function. So it would look like this:diff --git a/src/device.c b/src/device.c index 6cb9641..708e069 100644 --- a/src/device.c +++ b/src/device.c@@ -1134,8 +1134,6 @@ static void device_remove_drivers(structbtd_device *device, GSList *uuids) next = list->next; for (uuid = driver->uuids; *uuid; uuid++) { - sdp_record_t *rec; - if (!g_slist_find_custom(uuids, *uuid, (GCompareFunc) strcasecmp)) continue;@@ -1148,15 +1146,6 @@ static void device_remove_drivers(structbtd_device *device, GSList *uuids) driver_data); g_free(driver_data); - rec = find_record_in_list(records, *uuid); - if (!rec) - break; - - delete_record(srcaddr, dstaddr, rec->handle); - - records = sdp_list_remove(records, rec); - sdp_record_free(rec); - break; } }@@ -1164,8 +1153,19 @@ static void device_remove_drivers(structbtd_device *device, GSList *uuids) if (records) sdp_list_free(records, (sdp_free_func_t) sdp_record_free); - for (list = uuids; list; list = list->next) + for (list = uuids; list; list = list->next) { + sdp_record_t *rec; + device->uuids = g_slist_remove(device->uuids, list->data); + rec = find_record_in_list(records, list->data); + if (!rec) + break; + + delete_record(srcaddr, dstaddr, rec->handle); + + records = sdp_list_remove(records, rec); + sdp_record_free(rec); + } } static void services_changed(struct btd_device *device)
My mail to linux bluetooth bounced yesterday. Sending it again.
The req->profiles_removed gets updated from device->uuids.
However, in the case, where we are paired with the remote device and
we unpair and then repair, since we will free device->uuids on the
unpair, the req->profiles_removed won't get updated after the SDP
query on repair. And so we would need to update the storage from
device->uuids.
Since req->profiles_removed would be empty, device_remove_drivers
won't get called. Also I believe it makes sense to have 2 functions,
even though there is slight overhead, since the deletion of SDP
records from storage, and removing device_probe_drivers are 2 distinct
operations.
Coding style, cast issue, memory leak fixed, patch attached.
-- Luiz Augusto von Dentz Engenheiro de Computação
Attachments
- 0002-Update-SDP-storage-records-when-a-record-is-deleted.patch [application/octet-stream] 3262 bytes · preview