summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnderson Lizardo <anderson.lizardo@openbossa.org>2012-10-17 20:15:09 -0300
committerJohan Hedberg <johan.hedberg@intel.com>2012-10-18 10:32:49 +0300
commit8432085cfde946e2484062e51c3b8438c3b09d11 (patch)
treee01b9516c0d726dfc908f129c63b7852a97efc7b
parent01a2495a833d8e8d83bd5f0ec6c608fedabd4dbb (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.c4
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);