From fe0b931a381ebc016c05dd042d4f8c4c7337abeb Mon Sep 17 00:00:00 2001 From: Curry <46918772+CurryEx@users.noreply.github.com> Date: Sun, 18 Dec 2022 14:22:52 +0800 Subject: [PATCH 1/2] Update BLEDevice.cpp fix potential CORRUPT HEAP problem --- libraries/BLE/src/BLEDevice.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/libraries/BLE/src/BLEDevice.cpp b/libraries/BLE/src/BLEDevice.cpp index 683e4f5d2aa..d8d718b29a2 100644 --- a/libraries/BLE/src/BLEDevice.cpp +++ b/libraries/BLE/src/BLEDevice.cpp @@ -629,10 +629,15 @@ void BLEDevice::addPeerDevice(void* peer, bool _client, uint16_t conn_id) { m_connectedClientsMap.insert(std::pair(conn_id, status)); } +//there may have some situation that invoking this function simultaneously, that will cause CORRUPT HEAP +//let this function serializable +portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED; void BLEDevice::removePeerDevice(uint16_t conn_id, bool _client) { + portENTER_CRITICAL(&mux); log_i("remove: %d, GATT role %s", conn_id, _client?"client":"server"); if(m_connectedClientsMap.find(conn_id) != m_connectedClientsMap.end()) m_connectedClientsMap.erase(conn_id); + portEXIT_CRITICAL(&mux); } /* multi connect support */ From e1303f887db52fbcb9eb02d36d23878506251305 Mon Sep 17 00:00:00 2001 From: Curry Date: Mon, 19 Dec 2022 03:11:58 +0800 Subject: [PATCH 2/2] move mux to BLEDevice class --- libraries/BLE/src/BLEDevice.cpp | 2 +- libraries/BLE/src/BLEDevice.h | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/libraries/BLE/src/BLEDevice.cpp b/libraries/BLE/src/BLEDevice.cpp index d8d718b29a2..473f3ef032e 100644 --- a/libraries/BLE/src/BLEDevice.cpp +++ b/libraries/BLE/src/BLEDevice.cpp @@ -631,7 +631,7 @@ void BLEDevice::addPeerDevice(void* peer, bool _client, uint16_t conn_id) { //there may have some situation that invoking this function simultaneously, that will cause CORRUPT HEAP //let this function serializable -portMUX_TYPE mux = portMUX_INITIALIZER_UNLOCKED; +portMUX_TYPE BLEDevice::mux = portMUX_INITIALIZER_UNLOCKED; void BLEDevice::removePeerDevice(uint16_t conn_id, bool _client) { portENTER_CRITICAL(&mux); log_i("remove: %d, GATT role %s", conn_id, _client?"client":"server"); diff --git a/libraries/BLE/src/BLEDevice.h b/libraries/BLE/src/BLEDevice.h index aa548ddf3c5..9b9cdf03d15 100644 --- a/libraries/BLE/src/BLEDevice.h +++ b/libraries/BLE/src/BLEDevice.h @@ -73,6 +73,7 @@ class BLEDevice { static BLEAdvertising* m_bleAdvertising; static esp_gatt_if_t getGattcIF(); static std::map m_connectedClientsMap; + static portMUX_TYPE mux; static void gattClientEventHandler( esp_gattc_cb_event_t event,