@@ -784,19 +784,22 @@ BOOLEAN gatt_find_the_connected_bda(UINT8 start_idx, BD_ADDR bda, UINT8 *p_found
784
784
GATT_TRACE_DEBUG ("gatt_find_the_connected_bda start_idx=%d" , start_idx );
785
785
tGATT_TCB * p_tcb = NULL ;
786
786
list_node_t * p_node = NULL ;
787
- for (p_node = list_begin (gatt_cb .p_tcb_list ); p_node ; p_node = list_next (p_node )) {
788
- p_tcb = list_node (p_node );
789
- if (p_tcb -> in_use && p_tcb -> ch_state == GATT_CH_OPEN ) {
790
- memcpy ( bda , p_tcb -> peer_bda , BD_ADDR_LEN );
791
- * p_found_idx = p_tcb -> tcb_idx ;
792
- * p_transport = p_tcb -> transport ;
793
- found = TRUE;
794
- GATT_TRACE_DEBUG ("gatt_find_the_connected_bda bda :%02x-%02x-%02x-%02x-%02x-%02x" ,
795
- bda [0 ], bda [1 ], bda [2 ], bda [3 ], bda [4 ], bda [5 ]);
796
- break ;
787
+ p_tcb = gatt_get_tcb_by_idx (start_idx );
788
+ if (p_tcb ) {
789
+ for (p_node = list_get_node (gatt_cb .p_tcb_list , p_tcb ); p_node ; p_node = list_next (p_node )) {
790
+ p_tcb = list_node (p_node );
791
+ if (p_tcb -> in_use && p_tcb -> ch_state == GATT_CH_OPEN ) {
792
+ memcpy ( bda , p_tcb -> peer_bda , BD_ADDR_LEN );
793
+ * p_found_idx = p_tcb -> tcb_idx ;
794
+ * p_transport = p_tcb -> transport ;
795
+ found = TRUE;
796
+ GATT_TRACE_DEBUG ("gatt_find_the_connected_bda bda :%02x-%02x-%02x-%02x-%02x-%02x" ,
797
+ bda [0 ], bda [1 ], bda [2 ], bda [3 ], bda [4 ], bda [5 ]);
798
+ break ;
799
+ }
797
800
}
801
+ GATT_TRACE_DEBUG ("gatt_find_the_connected_bda found=%d found_idx=%d" , found , p_tcb -> tcb_idx );
798
802
}
799
- GATT_TRACE_DEBUG ("gatt_find_the_connected_bda found=%d found_idx=%d" , found , p_tcb -> tcb_idx );
800
803
return found ;
801
804
}
802
805
@@ -939,7 +942,9 @@ tGATT_TCB *gatt_get_tcb_by_idx(UINT8 tcb_idx)
939
942
p_tcb = list_node (p_node );
940
943
if ( (tcb_idx < GATT_MAX_PHY_CHANNEL ) && p_tcb -> in_use && p_tcb -> tcb_idx == tcb_idx ) {
941
944
break ;
942
- }
945
+ } else {
946
+ p_tcb = NULL ;
947
+ }
943
948
}
944
949
945
950
return p_tcb ;
@@ -1754,6 +1759,7 @@ tGATT_CLCB *gatt_clcb_alloc (UINT16 conn_id)
1754
1759
if (list_length (gatt_cb .p_clcb_list ) < GATT_CL_MAX_LCB ) {
1755
1760
p_clcb = (tGATT_CLCB * )osi_malloc (sizeof (tGATT_CLCB ));
1756
1761
if (p_clcb ) {
1762
+ list_append (gatt_cb .p_clcb_list , p_clcb );
1757
1763
memset (p_clcb , 0 , sizeof (tGATT_CLCB ));
1758
1764
p_clcb -> in_use = TRUE;
1759
1765
p_clcb -> conn_id = conn_id ;
@@ -1781,6 +1787,7 @@ void gatt_clcb_dealloc (tGATT_CLCB *p_clcb)
1781
1787
btu_free_timer (& p_clcb -> rsp_timer_ent );
1782
1788
memset (p_clcb , 0 , sizeof (tGATT_CLCB ));
1783
1789
list_remove (gatt_cb .p_clcb_list , p_clcb );
1790
+ p_clcb = NULL ;
1784
1791
}
1785
1792
}
1786
1793
@@ -2325,17 +2332,17 @@ void gatt_cleanup_upon_disc(BD_ADDR bda, UINT16 reason, tBT_TRANSPORT transport)
2325
2332
GATT_TRACE_DEBUG ("found p_tcb " );
2326
2333
gatt_set_ch_state (p_tcb , GATT_CH_CLOSE );
2327
2334
list_node_t * p_node = NULL ;
2328
- for (p_node = list_begin (gatt_cb .p_clcb_list ); p_node ; p_node = list_next (p_node )) {
2335
+ list_node_t * p_node_next = NULL ;
2336
+ for (p_node = list_begin (gatt_cb .p_clcb_list ); p_node ; p_node = p_node_next ) {
2329
2337
p_clcb = list_node (p_node );
2338
+ p_node_next = list_next (p_node );
2330
2339
if (p_clcb -> in_use && p_clcb -> p_tcb == p_tcb ) {
2331
2340
btu_stop_timer (& p_clcb -> rsp_timer_ent );
2332
2341
GATT_TRACE_DEBUG ("found p_clcb conn_id=%d clcb_idx=%d" , p_clcb -> conn_id , p_clcb -> clcb_idx );
2333
2342
if (p_clcb -> operation != GATTC_OPTYPE_NONE ) {
2334
2343
gatt_end_operation (p_clcb , GATT_ERROR , NULL );
2335
2344
}
2336
-
2337
2345
gatt_clcb_dealloc (p_clcb );
2338
-
2339
2346
}
2340
2347
}
2341
2348
0 commit comments