From 46069c64199c2ad4c446ecd9e5456381f3a4603d Mon Sep 17 00:00:00 2001 From: Srinu Jella Date: Mon, 7 Sep 2015 13:40:07 +0530 Subject: [PATCH] RFCOMM: Prevent sending data in BTA_JV_ST_NONE state This patch adds state check in bta_jv_rfcomm_write, to prevent sending data in BTA_JV_ST_NONE state. This would prevent an ASSERT in the code due to a null handle. The handle might have already been set to null during the closing of the RFCOMM connection. Change-Id: Ibc6b1fb7aa6dce9a4acb52d724af3023fad9a9ae --- bta/jv/bta_jv_act.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/bta/jv/bta_jv_act.c b/bta/jv/bta_jv_act.c index e5bddc4a1..96642ddef 100644 --- a/bta/jv/bta_jv_act.c +++ b/bta/jv/bta_jv_act.c @@ -2026,29 +2026,36 @@ void bta_jv_rfcomm_write(tBTA_JV_MSG *p_data) tBTA_JV_API_RFCOMM_WRITE *wc = &(p_data->rfcomm_write); tBTA_JV_RFC_CB *p_cb = wc->p_cb; tBTA_JV_PCB *p_pcb = wc->p_pcb; - tBTA_JV_RFCOMM_WRITE evt_data; + if (p_pcb->state == BTA_JV_ST_NONE) { + APPL_TRACE_ERROR("%s in state BTA_JV_ST_NONE - cannot write", __func__); + return; + } + + tBTA_JV_RFCOMM_WRITE evt_data; evt_data.status = BTA_JV_FAILURE; evt_data.handle = p_cb->handle; evt_data.req_id = wc->req_id; evt_data.cong = p_pcb->cong; evt_data.len = 0; + bta_jv_pm_conn_busy(p_pcb->p_pm_cb); + if (!evt_data.cong && PORT_WriteDataCO(p_pcb->port_handle, &evt_data.len) == PORT_SUCCESS) { evt_data.status = BTA_JV_SUCCESS; } - //update congestion flag + + // Update congestion flag evt_data.cong = p_pcb->cong; + if (p_cb->p_cback) { p_cb->p_cback(BTA_JV_RFCOMM_WRITE_EVT, (tBTA_JV *)&evt_data, p_pcb->user_data); - } - else - { - APPL_TRACE_ERROR("bta_jv_rfcomm_write :: WARNING ! No JV callback set"); + } else { + APPL_TRACE_ERROR("%s No JV callback set", __func__); } } -- 2.11.0