@@ -1045,6 +1045,11 @@ int bt_le_adv_start_ext(struct bt_le_ext_adv *adv,
10451045
10461046static void adv_timeout (struct k_work * work );
10471047
1048+ int bt_le_lim_adv_cancel_timeout (struct bt_le_ext_adv * adv )
1049+ {
1050+ return k_work_cancel_delayable (& adv -> lim_adv_timeout_work );
1051+ }
1052+
10481053int bt_le_adv_start (const struct bt_le_adv_param * param ,
10491054 const struct bt_data * ad , size_t ad_len ,
10501055 const struct bt_data * sd , size_t sd_len )
@@ -1068,8 +1073,8 @@ int bt_le_adv_start(const struct bt_le_adv_param *param,
10681073 }
10691074
10701075 if (ad_is_limited (ad , ad_len )) {
1071- k_work_init_delayable (& adv -> timeout_work , adv_timeout );
1072- k_work_reschedule (& adv -> timeout_work ,
1076+ k_work_init_delayable (& adv -> lim_adv_timeout_work , adv_timeout );
1077+ k_work_reschedule (& adv -> lim_adv_timeout_work ,
10731078 K_SECONDS (CONFIG_BT_LIM_ADV_TIMEOUT ));
10741079 }
10751080
@@ -1081,6 +1086,8 @@ int bt_le_adv_stop(void)
10811086 struct bt_le_ext_adv * adv = bt_le_adv_lookup_legacy ();
10821087 int err ;
10831088
1089+ (void )bt_le_lim_adv_cancel_timeout (adv );
1090+
10841091 if (!adv ) {
10851092 BT_ERR ("No valid legacy adv" );
10861093 return 0 ;
@@ -1332,6 +1339,8 @@ int bt_le_ext_adv_start(struct bt_le_ext_adv *adv,
13321339
13331340int bt_le_ext_adv_stop (struct bt_le_ext_adv * adv )
13341341{
1342+ (void )bt_le_lim_adv_cancel_timeout (adv );
1343+
13351344 atomic_clear_bit (adv -> flags , BT_ADV_PERSIST );
13361345
13371346 if (!atomic_test_bit (adv -> flags , BT_ADV_ENABLED )) {
@@ -1406,13 +1415,13 @@ int bt_le_ext_adv_delete(struct bt_le_ext_adv *adv)
14061415static void adv_timeout (struct k_work * work )
14071416{
14081417 int err = 0 ;
1409- #if defined(CONFIG_BT_EXT_ADV )
14101418 struct k_work_delayable * dwork ;
14111419 struct bt_le_ext_adv * adv ;
14121420
14131421 dwork = k_work_delayable_from_work (work );
1414- adv = CONTAINER_OF (dwork , struct bt_le_ext_adv , timeout_work );
1422+ adv = CONTAINER_OF (dwork , struct bt_le_ext_adv , lim_adv_timeout_work );
14151423
1424+ #if defined(CONFIG_BT_EXT_ADV )
14161425 if (adv == bt_dev .adv ) {
14171426 err = bt_le_adv_stop ();
14181427 } else {
@@ -1628,6 +1637,7 @@ void bt_hci_le_adv_set_terminated(struct net_buf *buf)
16281637 adv = bt_adv_lookup_handle (evt -> adv_handle );
16291638 conn_handle = sys_le16_to_cpu (evt -> conn_handle );
16301639
1640+ (void )bt_le_lim_adv_cancel_timeout (adv );
16311641#if (CONFIG_BT_ID_MAX > 1 ) && (CONFIG_BT_EXT_ADV_MAX_ADV_SET > 1 )
16321642 bt_dev .adv_conn_id = adv -> id ;
16331643 for (int i = 0 ; i < ARRAY_SIZE (bt_dev .cached_conn_complete ); i ++ ) {
0 commit comments