From 9eccc583d5bafb9b513e7a7d03efaa64b290d902 Mon Sep 17 00:00:00 2001 From: Josh Wu Date: Sun, 4 Feb 2024 21:38:34 +0800 Subject: [PATCH] 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. --- bumble/device.py | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/bumble/device.py b/bumble/device.py index 46ddc48e..01a5cbe0 100644 --- a/bumble/device.py +++ b/bumble/device.py @@ -2065,7 +2065,9 @@ class Device(CompositeEventEmitter): """Stop legacy advertising.""" # Disable advertising 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 elif self.legacy_advertiser: await self.legacy_advertiser.stop() @@ -2207,9 +2209,6 @@ class Device(CompositeEventEmitter): if self.legacy_advertiser: return True - if self.legacy_advertising_set and self.legacy_advertising_set.enabled: - return True - return any( advertising_set.enabled for advertising_set in self.extended_advertising_sets.values() @@ -3541,11 +3540,9 @@ class Device(CompositeEventEmitter): connection_handle, number_of_completed_extended_advertising_events, ): + # Legacy advertising set is also one of extended advertising sets. if not ( - advertising_set := ( - self.extended_advertising_sets.get(advertising_handle) - or self.legacy_advertising_set - ) + advertising_set := self.extended_advertising_sets.get(advertising_handle) ): logger.warning(f'advertising set {advertising_handle} not found') return