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:
Jiang Jiang Jian 2017-09-13 20:27:17 +08:00
commit b70329040d
3 changed files with 18 additions and 3 deletions

View file

@ -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;

View file

@ -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);
} }
} }

View file

@ -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;
} }