Merge branch 'bugfix/btdm_gatts_notify_stress_test_crash' into 'master'
component/bt: fix bug for gatts notify stress test crash See merge request !1245
This commit is contained in:
commit
b70329040d
3 changed files with 18 additions and 3 deletions
|
@ -37,7 +37,7 @@ esp_err_t esp_ble_gatt_set_local_mtu (uint16_t mtu)
|
||||||
ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
|
ESP_BLUEDROID_STATUS_CHECK(ESP_BLUEDROID_STATUS_ENABLED);
|
||||||
|
|
||||||
if ((mtu < ESP_GATT_DEF_BLE_MTU_SIZE) || (mtu > ESP_GATT_MAX_MTU_SIZE)) {
|
if ((mtu < ESP_GATT_DEF_BLE_MTU_SIZE) || (mtu > ESP_GATT_MAX_MTU_SIZE)) {
|
||||||
return ESP_GATT_ILLEGAL_PARAMETER;
|
return ESP_ERR_INVALID_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.sig = BTC_SIG_API_CALL;
|
msg.sig = BTC_SIG_API_CALL;
|
||||||
|
|
|
@ -363,8 +363,16 @@ static void fragmenter_transmit_finished(BT_HDR *packet, bool all_fragments_sent
|
||||||
// This is kind of a weird case, since we're dispatching a partially sent packet
|
// This is kind of a weird case, since we're dispatching a partially sent packet
|
||||||
// up to a higher layer.
|
// up to a higher layer.
|
||||||
// TODO(zachoverflow): rework upper layer so this isn't necessary.
|
// TODO(zachoverflow): rework upper layer so this isn't necessary.
|
||||||
buffer_allocator->free(packet);
|
//buffer_allocator->free(packet);
|
||||||
//dispatch_reassembled(packet);
|
|
||||||
|
/* dispatch_reassembled(packet) will send the packet back to the higher layer
|
||||||
|
when controller buffer is not enough. hci will send the remain packet back
|
||||||
|
to the l2cap layer and saved in the Link Queue (p_lcb->link_xmit_data_q).
|
||||||
|
The l2cap layer will resend the packet to lower layer when controller buffer
|
||||||
|
can be used.
|
||||||
|
*/
|
||||||
|
|
||||||
|
dispatch_reassembled(packet);
|
||||||
//data_dispatcher_dispatch(interface.event_dispatcher, packet->event & MSG_EVT_MASK, packet);
|
//data_dispatcher_dispatch(interface.event_dispatcher, packet->event & MSG_EVT_MASK, packet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,6 +111,13 @@ static void fragment_and_dispatch(BT_HDR *packet)
|
||||||
packet->layer_specific--;
|
packet->layer_specific--;
|
||||||
if (packet->layer_specific == 0) {
|
if (packet->layer_specific == 0) {
|
||||||
packet->event = MSG_HC_TO_STACK_L2C_SEG_XMIT;
|
packet->event = MSG_HC_TO_STACK_L2C_SEG_XMIT;
|
||||||
|
|
||||||
|
/* The remain packet will send back to the l2cap layer when controller buffer is not enough
|
||||||
|
current_fragment_packet must be NULL, otherwise hci_host_thread_handler() will
|
||||||
|
connitue handle the remain packet. then the remain packet will be freed.
|
||||||
|
*/
|
||||||
|
|
||||||
|
current_fragment_packet = NULL;
|
||||||
callbacks->transmit_finished(packet, false);
|
callbacks->transmit_finished(packet, false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue