From 8b353b60e29a1d365c8db99a71583968cb004149 Mon Sep 17 00:00:00 2001 From: Claudio Takahasi Date: Wed, 18 May 2011 18:33:38 -0300 Subject: [PATCH] Fix memory leak of EIR data --- src/adapter.c | 1 + src/eir.c | 7 +++++++ src/eir.h | 1 + 3 files changed, 9 insertions(+) diff --git a/src/adapter.c b/src/adapter.c index 4c3d02777..556de1aa4 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -3084,6 +3084,7 @@ void adapter_update_found_devices(struct btd_adapter *adapter, bdaddr_t *bdaddr, done: free(name); + eir_data_free(&eir_data); } int adapter_remove_found_device(struct btd_adapter *adapter, bdaddr_t *bdaddr) diff --git a/src/eir.c b/src/eir.c index d827c7ea3..2fbd919df 100644 --- a/src/eir.c +++ b/src/eir.c @@ -44,6 +44,13 @@ #define EIR_TX_POWER 0x0A /* transmit power level */ #define EIR_DEVICE_ID 0x10 /* device ID */ +void eir_data_free(struct eir_data *eir) +{ + g_slist_foreach(eir->services, (GFunc) g_free, NULL); + g_slist_free(eir->services); + g_free(eir->name); +} + int eir_parse(struct eir_data *eir, uint8_t *eir_data, size_t eir_length) { uint16_t len = 0; diff --git a/src/eir.h b/src/eir.h index c7699eb88..aacd16a7b 100644 --- a/src/eir.h +++ b/src/eir.h @@ -36,6 +36,7 @@ struct eir_data { gboolean name_complete; }; +void eir_data_free(struct eir_data *eir); int eir_parse(struct eir_data *eir, uint8_t *eir_data, size_t eir_length); void eir_create(const char *name, int8_t tx_power, uint16_t did_vendor, uint16_t did_product, uint16_t did_version, -- 2.47.3