Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit bb8c855

Browse filesBrowse 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
Copy full SHA for bb8c855

File tree

Expand file treeCollapse file tree

2 files changed

+6
-0
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+6
-0
lines changed

‎libraries/BLE/src/BLEDevice.cpp

Copy file name to clipboardExpand all lines: libraries/BLE/src/BLEDevice.cpp
+5Lines changed: 5 additions & 0 deletions
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

Copy file name to clipboardExpand all lines: libraries/BLE/src/BLEDevice.h
+1Lines changed: 1 addition & 0 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.