aboutsummaryrefslogtreecommitdiff
path: root/gd/l2cap/internal/le_credit_based_channel_data_controller.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gd/l2cap/internal/le_credit_based_channel_data_controller.cc')
-rw-r--r--gd/l2cap/internal/le_credit_based_channel_data_controller.cc4
1 files changed, 3 insertions, 1 deletions
diff --git a/gd/l2cap/internal/le_credit_based_channel_data_controller.cc b/gd/l2cap/internal/le_credit_based_channel_data_controller.cc
index 943cb17b2..ca42d1d16 100644
--- a/gd/l2cap/internal/le_credit_based_channel_data_controller.cc
+++ b/gd/l2cap/internal/le_credit_based_channel_data_controller.cc
@@ -93,7 +93,7 @@ void LeCreditBasedDataController::OnPdu(packet::PacketView<true> pdu) {
enqueue_buffer_.Enqueue(std::make_unique<PacketView<kLittleEndian>>(reassembly_stage_), handler_);
} else if (remaining_sdu_continuation_packet_size_ < 0 || reassembly_stage_.size() > mtu_) {
LOG_WARN("Received larger SDU size than expected");
- reassembly_stage_ = PacketViewForReassembly(std::make_shared<std::vector<uint8_t>>());
+ reassembly_stage_ = PacketViewForReassembly(PacketView<kLittleEndian>(std::make_shared<std::vector<uint8_t>>()));
remaining_sdu_continuation_packet_size_ = 0;
link_->SendDisconnectionRequest(cid_, remote_cid_);
}
@@ -102,6 +102,7 @@ void LeCreditBasedDataController::OnPdu(packet::PacketView<true> pdu) {
}
std::unique_ptr<packet::BasePacketBuilder> LeCreditBasedDataController::GetNextPacket() {
+ ASSERT(!pdu_queue_.empty());
auto next = std::move(pdu_queue_.front());
pdu_queue_.pop();
return next;
@@ -123,6 +124,7 @@ void LeCreditBasedDataController::OnCredit(uint16_t credits) {
credits_ = total_credits;
if (pending_frames_count_ > 0 && credits_ >= pending_frames_count_) {
scheduler_->OnPacketsReady(cid_, pending_frames_count_);
+ pending_frames_count_ = 0;
credits_ -= pending_frames_count_;
} else if (pending_frames_count_ > 0) {
scheduler_->OnPacketsReady(cid_, credits_);