@@ -997,6 +997,11 @@ int bt_le_adv_start_ext(struct bt_le_ext_adv *adv,
997
997
998
998
static void adv_timeout (struct k_work * work );
999
999
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
+
1000
1005
int bt_le_adv_start (const struct bt_le_adv_param * param ,
1001
1006
const struct bt_data * ad , size_t ad_len ,
1002
1007
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,
1020
1025
}
1021
1026
1022
1027
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 ,
1025
1030
K_SECONDS (CONFIG_BT_LIM_ADV_TIMEOUT ));
1026
1031
}
1027
1032
@@ -1033,6 +1038,8 @@ int bt_le_adv_stop(void)
1033
1038
struct bt_le_ext_adv * adv = bt_le_adv_lookup_legacy ();
1034
1039
int err ;
1035
1040
1041
+ (void )bt_le_lim_adv_cancel_timeout (adv );
1042
+
1036
1043
if (!adv ) {
1037
1044
BT_ERR ("No valid legacy adv" );
1038
1045
return 0 ;
@@ -1284,6 +1291,8 @@ int bt_le_ext_adv_start(struct bt_le_ext_adv *adv,
1284
1291
1285
1292
int bt_le_ext_adv_stop (struct bt_le_ext_adv * adv )
1286
1293
{
1294
+ (void )bt_le_lim_adv_cancel_timeout (adv );
1295
+
1287
1296
atomic_clear_bit (adv -> flags , BT_ADV_PERSIST );
1288
1297
1289
1298
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)
1360
1369
static void adv_timeout (struct k_work * work )
1361
1370
{
1362
1371
int err = 0 ;
1363
- #if defined(CONFIG_BT_EXT_ADV )
1364
1372
struct k_work_delayable * dwork ;
1365
1373
struct bt_le_ext_adv * adv ;
1366
1374
1367
1375
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 );
1369
1377
1378
+ #if defined(CONFIG_BT_EXT_ADV )
1370
1379
if (adv == bt_dev .adv ) {
1371
1380
err = bt_le_adv_stop ();
1372
1381
} else {
@@ -1582,6 +1591,7 @@ void bt_hci_le_adv_set_terminated(struct net_buf *buf)
1582
1591
adv = bt_adv_lookup_handle (evt -> adv_handle );
1583
1592
conn_handle = sys_le16_to_cpu (evt -> conn_handle );
1584
1593
1594
+ (void )bt_le_lim_adv_cancel_timeout (adv );
1585
1595
#if (CONFIG_BT_ID_MAX > 1 ) && (CONFIG_BT_EXT_ADV_MAX_ADV_SET > 1 )
1586
1596
bt_dev .adv_conn_id = adv -> id ;
1587
1597
for (int i = 0 ; i < ARRAY_SIZE (bt_dev .cached_conn_complete ); i ++ ) {
0 commit comments