From a9b515d0d1a767645576a697baa7763fea3d2dc9 Mon Sep 17 00:00:00 2001 From: xiongweichao Date: Wed, 20 Apr 2022 20:04:42 +0800 Subject: [PATCH 1/2] Fix spp crash after calling esp_spp_deinit --- .../bt/host/bluedroid/btc/profile/std/spp/btc_spp.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c b/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c index 41afac4a9d..010a370139 100644 --- a/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c +++ b/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c @@ -582,11 +582,6 @@ static void btc_spp_uninit(void) osi_mutex_unlock(&spp_local_param.spp_slot_mutex); } while(0); - if (spp_local_param.tx_event_group) { - vEventGroupDelete(spp_local_param.tx_event_group); - spp_local_param.tx_event_group = NULL; - } - if (ret != ESP_SPP_SUCCESS) { esp_spp_cb_param_t param; param.uninit.status = ret; @@ -1256,6 +1251,10 @@ void btc_spp_cb_handler(btc_msg_t *msg) param.uninit.status = ESP_SPP_SUCCESS; BTA_JvFree(); osi_mutex_free(&spp_local_param.spp_slot_mutex); + if (spp_local_param.tx_event_group) { + vEventGroupDelete(spp_local_param.tx_event_group); + spp_local_param.tx_event_group = NULL; + } #if SPP_DYNAMIC_MEMORY == TRUE osi_free(spp_local_param_ptr); spp_local_param_ptr = NULL; From e0cf810bab257a86ce44d9f6ff009f400ecdbbb9 Mon Sep 17 00:00:00 2001 From: xiongweichao Date: Thu, 21 Apr 2022 11:05:04 +0800 Subject: [PATCH 2/2] Fix spp initialization failure without free mutex --- components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c | 1 + 1 file changed, 1 insertion(+) diff --git a/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c b/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c index 010a370139..025500407f 100644 --- a/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c +++ b/components/bt/host/bluedroid/btc/profile/std/spp/btc_spp.c @@ -519,6 +519,7 @@ static void btc_spp_init(btc_spp_args_t *arg) } if ((spp_local_param.tx_event_group = xEventGroupCreate()) == NULL) { BTC_TRACE_ERROR("%s create tx_event_group failed\n", __func__); + osi_mutex_free(&spp_local_param.spp_slot_mutex); ret = ESP_SPP_NO_RESOURCE; break; }