OSDN Git Service

AV: Use separate AV sig timeout timer for dual connections.
authorSumit Bajpai <sbajpai@codeaurora.org>
Wed, 14 Jun 2017 08:45:25 +0000 (14:15 +0530)
committerGerrit - the friendly Code Review server <code-review@localhost>
Fri, 16 Jun 2017 06:30:40 +0000 (23:30 -0700)
In dual a2dp connection scenario, if both remote devices
initiate connection at same time, DUT replaces AV signalling
timeout timer which started for 1st device when avdtp l2cap
sig channel was established with that of 2nd device when
its channel is established. In case remote1 doesn't start
AV signalling procedure hence, then DUT also fails to do
so as timer for remote1 was lost. The fix keeps two separate
timers for two connections.

Change-Id: I3ceea4f035a115985d692d30f39c3a0e4729a323

bta/av/bta_av_aact.c
bta/av/bta_av_act.c
bta/av/bta_av_int.h
bta/av/bta_av_main.c

index 5b32f6a..efca549 100644 (file)
@@ -1283,7 +1283,8 @@ void bta_av_config_ind (tBTA_AV_SCB *p_scb, tBTA_AV_DATA *p_data)
         APPL_TRACE_WARNING(" bta_av_config_ind config_ind called before Open");
         p_scb->coll_mask |= BTA_AV_COLL_SETCONFIG_IND;
     }
-    alarm_cancel(bta_av_cb.accept_signalling_timer);
+    APPL_TRACE_DEBUG(" bta_av_config_ind p_scb->hdi = %d ", p_scb->hdi);
+    alarm_cancel(bta_av_cb.accept_signalling_timer[p_scb->hdi]);
 
     /* if no codec parameters in configuration, fail */
     if ((p_evt_cfg->num_codec == 0) ||
index 0bc5caa..79d577e 100755 (executable)
@@ -1547,12 +1547,12 @@ void bta_av_disable(tBTA_AV_CB *p_cb, tBTA_AV_DATA *p_data)
     {
         hdr.layer_specific = xx + 1;
         bta_av_api_deregister((tBTA_AV_DATA *)&hdr);
+        alarm_free(p_cb->accept_signalling_timer[xx]);
+        p_cb->accept_signalling_timer[xx] = NULL;
     }
 
     alarm_free(p_cb->link_signalling_timer);
     p_cb->link_signalling_timer = NULL;
-    alarm_free(p_cb->accept_signalling_timer);
-    p_cb->accept_signalling_timer = NULL;
 }
 
 /*******************************************************************************
@@ -1667,7 +1667,7 @@ void bta_av_sig_chg(tBTA_AV_DATA *p_data)
                                 p_cb->p_scb[xx]->peer_addr);
                         /* Possible collision : need to avoid outgoing processing while the timer is running */
                         p_cb->p_scb[xx]->coll_mask = BTA_AV_COLL_INC_TMR;
-                        alarm_set_on_queue(p_cb->accept_signalling_timer,
+                        alarm_set_on_queue(p_cb->accept_signalling_timer[xx],
                                            BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS,
                                            bta_av_accept_signalling_timer_cback,
                                            UINT_TO_PTR(xx),
@@ -1806,7 +1806,7 @@ static void bta_av_accept_signalling_timer_cback(void *data)
                     /* We are still doing SDP. Run the timer again. */
                     p_scb->coll_mask |= BTA_AV_COLL_INC_TMR;
 
-                    alarm_set_on_queue(p_cb->accept_signalling_timer,
+                    alarm_set_on_queue(p_cb->accept_signalling_timer[inx],
                                        BTA_AV_ACCEPT_SIGNALLING_TIMEOUT_MS,
                                        bta_av_accept_signalling_timer_cback,
                                        UINT_TO_PTR(inx),
index 7bb6e41..8e01245 100644 (file)
@@ -606,7 +606,7 @@ typedef struct
     tBTA_AV_RCB         rcb[BTA_AV_NUM_RCB];  /* RCB control block */
     tBTA_AV_LCB         lcb[BTA_AV_NUM_LINKS+1];  /* link control block */
     alarm_t             *link_signalling_timer;
-    alarm_t             *accept_signalling_timer; /* timer to monitor signalling when accepting */
+    alarm_t             *accept_signalling_timer[BTA_AV_NUM_STRS]; /* timer to monitor signalling when accepting */
     UINT32              sdp_a2d_handle; /* SDP record handle for audio src */
 #if (BTA_AV_SINK_INCLUDED == TRUE)
     UINT32              sdp_a2d_snk_handle; /* SDP record handle for audio snk */
index 4b802e0..45102c9 100644 (file)
@@ -256,8 +256,11 @@ static void bta_av_api_enable(tBTA_AV_DATA *p_data)
      * to alarm_free() the alarms below.
      */
     bta_av_cb.link_signalling_timer = alarm_new("bta_av.link_signalling_timer");
-    bta_av_cb.accept_signalling_timer =
-        alarm_new("bta_av.accept_signalling_timer");
+    for (int j = 0; j < BTA_AV_NUM_STRS; j++)
+    {
+        bta_av_cb.accept_signalling_timer[j] =
+            alarm_new("bta_av.accept_signalling_timer");
+    }
 
     /* store parameters */
     bta_av_cb.p_cback  = p_data->api_enable.p_cback;