Skip to content

Commit bb8c855

Browse files
authored
Fix potential CORRUPT HEAP problem on libraries/BLE/src/BLEDevice.cpp (espressif#7597)
* Update BLEDevice.cpp fix potential CORRUPT HEAP problem * move mux to BLEDevice class
1 parent 94fd529 commit bb8c855

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

libraries/BLE/src/BLEDevice.cpp

+5
Original file line numberDiff line numberDiff line change
@@ -629,10 +629,15 @@ void BLEDevice::addPeerDevice(void* peer, bool _client, uint16_t conn_id) {
629629
m_connectedClientsMap.insert(std::pair<uint16_t, conn_status_t>(conn_id, status));
630630
}
631631

632+
//there may have some situation that invoking this function simultaneously, that will cause CORRUPT HEAP
633+
//let this function serializable
634+
portMUX_TYPE BLEDevice::mux = portMUX_INITIALIZER_UNLOCKED;
632635
void BLEDevice::removePeerDevice(uint16_t conn_id, bool _client) {
636+
portENTER_CRITICAL(&mux);
633637
log_i("remove: %d, GATT role %s", conn_id, _client?"client":"server");
634638
if(m_connectedClientsMap.find(conn_id) != m_connectedClientsMap.end())
635639
m_connectedClientsMap.erase(conn_id);
640+
portEXIT_CRITICAL(&mux);
636641
}
637642

638643
/* multi connect support */

libraries/BLE/src/BLEDevice.h

+1
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ class BLEDevice {
7373
static BLEAdvertising* m_bleAdvertising;
7474
static esp_gatt_if_t getGattcIF();
7575
static std::map<uint16_t, conn_status_t> m_connectedClientsMap;
76+
static portMUX_TYPE mux;
7677

7778
static void gattClientEventHandler(
7879
esp_gattc_cb_event_t event,

0 commit comments

Comments
 (0)