@@ -997,6 +997,11 @@ int bt_le_adv_start_ext(struct bt_le_ext_adv *adv,
997997
998998static void adv_timeout (struct k_work * work );
999999
1000+ int bt_le_lim_adv_cancel_timeout (struct bt_le_ext_adv * adv )
1001+ {
1002+ return k_work_cancel_delayable (& adv -> lim_adv_timeout_work );
1003+ }
1004+
10001005int bt_le_adv_start (const struct bt_le_adv_param * param ,
10011006 const struct bt_data * ad , size_t ad_len ,
10021007 const struct bt_data * sd , size_t sd_len )
@@ -1020,8 +1025,8 @@ int bt_le_adv_start(const struct bt_le_adv_param *param,
10201025 }
10211026
10221027 if (ad_is_limited (ad , ad_len )) {
1023- k_work_init_delayable (& adv -> timeout_work , adv_timeout );
1024- k_work_reschedule (& adv -> timeout_work ,
1028+ k_work_init_delayable (& adv -> lim_adv_timeout_work , adv_timeout );
1029+ k_work_reschedule (& adv -> lim_adv_timeout_work ,
10251030 K_SECONDS (CONFIG_BT_LIM_ADV_TIMEOUT ));
10261031 }
10271032
@@ -1033,6 +1038,8 @@ int bt_le_adv_stop(void)
10331038 struct bt_le_ext_adv * adv = bt_le_adv_lookup_legacy ();
10341039 int err ;
10351040
1041+ (void )bt_le_lim_adv_cancel_timeout (adv );
1042+
10361043 if (!adv ) {
10371044 BT_ERR ("No valid legacy adv" );
10381045 return 0 ;
@@ -1284,6 +1291,8 @@ int bt_le_ext_adv_start(struct bt_le_ext_adv *adv,
12841291
12851292int bt_le_ext_adv_stop (struct bt_le_ext_adv * adv )
12861293{
1294+ (void )bt_le_lim_adv_cancel_timeout (adv );
1295+
12871296 atomic_clear_bit (adv -> flags , BT_ADV_PERSIST );
12881297
12891298 if (!atomic_test_bit (adv -> flags , BT_ADV_ENABLED )) {
@@ -1360,13 +1369,13 @@ int bt_le_ext_adv_delete(struct bt_le_ext_adv *adv)
13601369static void adv_timeout (struct k_work * work )
13611370{
13621371 int err = 0 ;
1363- #if defined(CONFIG_BT_EXT_ADV )
13641372 struct k_work_delayable * dwork ;
13651373 struct bt_le_ext_adv * adv ;
13661374
13671375 dwork = k_work_delayable_from_work (work );
1368- adv = CONTAINER_OF (dwork , struct bt_le_ext_adv , timeout_work );
1376+ adv = CONTAINER_OF (dwork , struct bt_le_ext_adv , lim_adv_timeout_work );
13691377
1378+ #if defined(CONFIG_BT_EXT_ADV )
13701379 if (adv == bt_dev .adv ) {
13711380 err = bt_le_adv_stop ();
13721381 } else {
@@ -1582,6 +1591,7 @@ void bt_hci_le_adv_set_terminated(struct net_buf *buf)
15821591 adv = bt_adv_lookup_handle (evt -> adv_handle );
15831592 conn_handle = sys_le16_to_cpu (evt -> conn_handle );
15841593
1594+ (void )bt_le_lim_adv_cancel_timeout (adv );
15851595#if (CONFIG_BT_ID_MAX > 1 ) && (CONFIG_BT_EXT_ADV_MAX_ADV_SET > 1 )
15861596 bt_dev .adv_conn_id = adv -> id ;
15871597 for (int i = 0 ; i < ARRAY_SIZE (bt_dev .cached_conn_complete ); i ++ ) {
0 commit comments