From 7a7c5e3032aad9ad3bfa73fef9bf6b883bb73992 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Thu, 9 Aug 2012 14:53:11 +0300 Subject: [PATCH] core: Fix memory leak while reading device records btd_device_get_record does not free the current list of records when reloading it from the storage: at 0x4A0884D: malloc (vg_replace_malloc.c:263) by 0x18EB85: sdp_list_append (sdp.c:1749) by 0x172798: create_stored_records_from_keys (storage.c:930) by 0x16FA73: textfile_foreach (textfile.c:475) by 0x1729C8: read_records (storage.c:966) by 0x17E439: btd_device_get_record (device.c:2991) by 0x17E4DC: device_services_from_record (device.c:1586) by 0x17677B: create_stored_device_from_profiles (adapter.c:1702) by 0x16FA73: textfile_foreach (textfile.c:475) by 0x1762BC: load_devices (adapter.c:1971) by 0x17A409: adapter_init (adapter.c:2422) by 0x175650: btd_manager_register_adapter (manager.c:364) --- src/device.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/device.c b/src/device.c index 45ad1aee6..dad9c7920 100644 --- a/src/device.c +++ b/src/device.c @@ -2984,6 +2984,10 @@ const sdp_record_t *btd_device_get_record(struct btd_device *device, record = find_record_in_list(device->tmp_records, uuid); if (record != NULL) return record; + + sdp_list_free(device->tmp_records, + (sdp_free_func_t) sdp_record_free); + device->tmp_records = NULL; } adapter_get_address(device->adapter, &src); -- 2.47.3