diff options
author | Anderson Lizardo <anderson.lizardo@openbossa.org> | 2012-10-17 20:15:09 -0300 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2012-10-18 10:32:49 +0300 |
commit | 8432085cfde946e2484062e51c3b8438c3b09d11 (patch) | |
tree | e01b9516c0d726dfc908f129c63b7852a97efc7b | |
parent | 01a2495a833d8e8d83bd5f0ec6c608fedabd4dbb (diff) |
adapter: Fix memory leak on discovery cleanup
During discovery cleanup, it was attempted to send a DevicesFound()
D-Bus signal for pending found devices, but adapter->discovery was set
to NULL before calling send_devices_found(), therefore it never sent any
signal (and there was a leak of discovery->pending list).
Fixes this memory leak when pairing two LE devices:
==1822== 8 bytes in 1 blocks are definitely lost in loss record 42 of
246
==1822== at 0x482BE68: malloc (in
/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==1822== by 0x48869AA: standard_malloc (gmem.c:85)
==1822== by 0x4886E42: g_malloc (gmem.c:159)
==1822== by 0x489B26D: g_slice_alloc (gslice.c:1003)
==1822== by 0x489C10A: g_slist_prepend (gslist.c:265)
==1822== by 0x1855AE: adapter_update_found_devices (adapter.c:2846)
==1822== by 0x191431: btd_event_device_found (event.c:260)
==1822== by 0xBC01001A: ???
==1822==
-rw-r--r-- | src/adapter.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/adapter.c b/src/adapter.c index 7c2aec0a..3b24816d 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -556,8 +556,6 @@ static void discovery_cleanup(struct btd_adapter *adapter) { struct discovery *discovery = adapter->discovery; - adapter->discovery = NULL; - if (!discovery) return; @@ -566,6 +564,8 @@ static void discovery_cleanup(struct btd_adapter *adapter) send_devices_found(adapter); + adapter->discovery = NULL; + g_slist_free_full(discovery->found, invalidate_rssi); g_free(discovery); |