From 196413f5ca088ef97866092f02bb7571d2a44390 Mon Sep 17 00:00:00 2001 From: Andre Eisenbach Date: Wed, 22 Jul 2015 13:47:28 -0700 Subject: [PATCH] Fix TX queue overflow detection - Prevent possible endless loop if |nb_frame| is too high - Remove off-by-one calculation before sending frames - Remove log spam and add better debug info Bug: 22658329 Change-Id: I374ee980aec48763beb49b4f6f8b076124cadf40 --- btif/src/btif_media_task.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/btif/src/btif_media_task.c b/btif/src/btif_media_task.c index eab3685e9..1f5f9c73f 100644 --- a/btif/src/btif_media_task.c +++ b/btif/src/btif_media_task.c @@ -2599,14 +2599,21 @@ static void btif_media_aa_prep_sbc_2_send(UINT8 nb_frame) static void btif_media_aa_prep_2_send(UINT8 nb_frame) { - while (GKI_queue_length(&btif_media_cb.TxAaQ) >= (MAX_OUTPUT_A2DP_FRAME_QUEUE_SZ-nb_frame)) + // Check for TX queue overflow + + if (nb_frame > MAX_OUTPUT_A2DP_FRAME_QUEUE_SZ) + nb_frame = MAX_OUTPUT_A2DP_FRAME_QUEUE_SZ; + + if (GKI_queue_length(&btif_media_cb.TxAaQ) > (MAX_OUTPUT_A2DP_FRAME_QUEUE_SZ - nb_frame)) { - APPL_TRACE_WARNING("%s() - TX queue buffer count %d", - __FUNCTION__, GKI_queue_length(&btif_media_cb.TxAaQ)); - GKI_freebuf(GKI_dequeue(&(btif_media_cb.TxAaQ))); + APPL_TRACE_WARNING("%s() - TX queue buffer count %d/%d", __func__, + GKI_queue_length(&btif_media_cb.TxAaQ), MAX_OUTPUT_A2DP_FRAME_QUEUE_SZ - nb_frame); } - if (GKI_queue_length(&btif_media_cb.TxAaQ)) --nb_frame; + while (GKI_queue_length(&btif_media_cb.TxAaQ) > (MAX_OUTPUT_A2DP_FRAME_QUEUE_SZ - nb_frame)) + GKI_freebuf(GKI_dequeue(&(btif_media_cb.TxAaQ))); + + // Transcode frame switch (btif_media_cb.TxTranscoding) { @@ -2614,9 +2621,8 @@ static void btif_media_aa_prep_2_send(UINT8 nb_frame) btif_media_aa_prep_sbc_2_send(nb_frame); break; - default: - APPL_TRACE_ERROR("ERROR btif_media_aa_prep_2_send unsupported transcoding format 0x%x",btif_media_cb.TxTranscoding); + APPL_TRACE_ERROR("%s unsupported transcoding format 0x%x", __func__, btif_media_cb.TxTranscoding); break; } } -- 2.11.0