Return-Path: From: Grzegorz Kolodziejczyk To: linux-bluetooth@vger.kernel.org Subject: [PATCH BlueZ 1/5] tools: btpclient: Clear advertising data on reset Date: Thu, 25 Jan 2018 16:53:29 +0100 Message-Id: <20180125155333.12734-1-grzegorz.kolodziejczyk@codecoup.pl> Sender: linux-bluetooth-owner@vger.kernel.org List-ID: Advertising data should be cleared on gap reset command. --- tools/btpclient.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/tools/btpclient.c b/tools/btpclient.c index 3c88f1496..bdc404dd9 100644 --- a/tools/btpclient.c +++ b/tools/btpclient.c @@ -390,6 +390,24 @@ static void unreg_advertising_setup(struct l_dbus_message *message, l_dbus_message_builder_destroy(builder); } +static void ad_cleanup_service(void *service) +{ + struct service_data *s = service; + + l_free(s->uuid); + l_free(s); +} + +static void ad_cleanup(void) +{ + l_free(ad.local_name); + l_queue_destroy(ad.uuids, l_free); + l_queue_destroy(ad.services, ad_cleanup_service); + l_queue_destroy(ad.manufacturers, l_free); + + memset(&ad, 0, sizeof(ad)); +} + static void unreg_advertising_reply(struct l_dbus_proxy *proxy, struct l_dbus_message *result, void *user_data) @@ -417,6 +435,8 @@ static void unreg_advertising_reply(struct l_dbus_proxy *proxy, l_info("Unable to remove propety instance"); if (!l_dbus_unregister_interface(dbus, AD_IFACE)) l_info("Unable to unregister ad interface"); + + ad_cleanup(); } static void btp_gap_reset(uint8_t index, const void *param, uint16_t length, @@ -449,7 +469,7 @@ static void btp_gap_reset(uint8_t index, const void *param, uint16_t length, NULL); } - if (adapter->ad_proxy) + if (adapter->ad_proxy && ad.registered) if (!l_dbus_proxy_method_call(adapter->ad_proxy, "UnregisterAdvertisement", unreg_advertising_setup, @@ -646,24 +666,6 @@ failed: btp_send_error(btp, BTP_GAP_SERVICE, index, status); } -static void ad_cleanup_service(void *service) -{ - struct service_data *s = service; - - l_free(s->uuid); - l_free(s); -} - -static void ad_cleanup(void) -{ - l_free(ad.local_name); - l_queue_destroy(ad.uuids, l_free); - l_queue_destroy(ad.services, ad_cleanup_service); - l_queue_destroy(ad.manufacturers, l_free); - - memset(&ad, 0, sizeof(ad)); -} - static void ad_init(void) { ad.uuids = l_queue_new(); -- 2.13.6