diff --git a/libraries/BLE/src/BLEDevice.cpp b/libraries/BLE/src/BLEDevice.cpp index 683e4f5d2aa..473f3ef032e 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 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"); if(m_connectedClientsMap.find(conn_id) != m_connectedClientsMap.end()) m_connectedClientsMap.erase(conn_id); + portEXIT_CRITICAL(&mux); } /* multi connect support */ 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,