Merge branch 'bugfix/fix_fast_packets_handling' into 'master'

Nimble: Retry buffer allocation, if previous allocation fails

Closes BT-2473 and IDFGH-9487

See merge request espressif/esp-idf!22586
This commit is contained in:
Jiang Jiang Jian
2023-03-09 17:44:54 +08:00

View File

@@ -140,19 +140,23 @@ int ble_hci_trans_reset(void)
static void ble_hci_rx_acl(uint8_t *data, uint16_t len) static void ble_hci_rx_acl(uint8_t *data, uint16_t len)
{ {
struct os_mbuf *m; struct os_mbuf *m = NULL;
int rc; int rc;
int sr; int sr;
if (len < BLE_HCI_DATA_HDR_SZ || len > MYNEWT_VAL(BLE_TRANSPORT_ACL_SIZE)) { if (len < BLE_HCI_DATA_HDR_SZ || len > MYNEWT_VAL(BLE_TRANSPORT_ACL_SIZE)) {
return; return;
} }
do {
m = ble_transport_alloc_acl_from_hs(); m = ble_transport_alloc_acl_from_hs();
if (!m) { if (!m) {
ESP_LOGE(TAG, "%s failed to allocate ACL buffers; increase ACL_BUF_COUNT", __func__); ESP_LOGD(TAG,"Failed to allocate buffer, retrying \n");
return; /* Give some time to free buffer and try again */
vTaskDelay(1);
} }
}while(!m);
if ((rc = os_mbuf_append(m, data, len)) != 0) { if ((rc = os_mbuf_append(m, data, len)) != 0) {
ESP_LOGE(TAG, "%s failed to os_mbuf_append; rc = %d", __func__, rc); ESP_LOGE(TAG, "%s failed to os_mbuf_append; rc = %d", __func__, rc);
os_mbuf_free_chain(m); os_mbuf_free_chain(m);