Fix double-disable legacy advertising set

When legacy advertising set is disabled passively(by set termination),
the legacy advertising set won't be released, and the next
stop_advertising() call will try to disable it again and cause an error.
This commit is contained in:
Josh Wu
2024-02-04 21:38:34 +08:00
parent f4aeaa6eb3
commit 9eccc583d5

View File

@@ -2065,7 +2065,9 @@ class Device(CompositeEventEmitter):
"""Stop legacy advertising.""" """Stop legacy advertising."""
# Disable advertising # Disable advertising
if self.legacy_advertising_set: if self.legacy_advertising_set:
await self.legacy_advertising_set.stop() if self.legacy_advertising_set.enabled:
await self.legacy_advertising_set.stop()
await self.legacy_advertising_set.remove()
self.legacy_advertising_set = None self.legacy_advertising_set = None
elif self.legacy_advertiser: elif self.legacy_advertiser:
await self.legacy_advertiser.stop() await self.legacy_advertiser.stop()
@@ -2207,9 +2209,6 @@ class Device(CompositeEventEmitter):
if self.legacy_advertiser: if self.legacy_advertiser:
return True return True
if self.legacy_advertising_set and self.legacy_advertising_set.enabled:
return True
return any( return any(
advertising_set.enabled advertising_set.enabled
for advertising_set in self.extended_advertising_sets.values() for advertising_set in self.extended_advertising_sets.values()
@@ -3541,11 +3540,9 @@ class Device(CompositeEventEmitter):
connection_handle, connection_handle,
number_of_completed_extended_advertising_events, number_of_completed_extended_advertising_events,
): ):
# Legacy advertising set is also one of extended advertising sets.
if not ( if not (
advertising_set := ( advertising_set := self.extended_advertising_sets.get(advertising_handle)
self.extended_advertising_sets.get(advertising_handle)
or self.legacy_advertising_set
)
): ):
logger.warning(f'advertising set {advertising_handle} not found') logger.warning(f'advertising set {advertising_handle} not found')
return return