diff --git a/homeassistant/components/bluetooth/__init__.py b/homeassistant/components/bluetooth/__init__.py index c91563d7729..0b81472f838 100644 --- a/homeassistant/components/bluetooth/__init__.py +++ b/homeassistant/components/bluetooth/__init__.py @@ -188,7 +188,7 @@ async def async_process_advertisements( def _async_discovered_device( service_info: BluetoothServiceInfoBleak, change: BluetoothChange ) -> None: - if callback(service_info): + if not done.done() and callback(service_info): done.set_result(service_info) unload = async_register_callback(hass, _async_discovered_device, match_dict, mode) diff --git a/tests/components/bluetooth/test_init.py b/tests/components/bluetooth/test_init.py index edc5eb024a6..ba315b1f380 100644 --- a/tests/components/bluetooth/test_init.py +++ b/tests/components/bluetooth/test_init.py @@ -856,6 +856,9 @@ async def test_process_advertisements_bail_on_good_advertisement( ) _get_underlying_scanner()._callback(device, adv) + _get_underlying_scanner()._callback(device, adv) + _get_underlying_scanner()._callback(device, adv) + await asyncio.sleep(0) result = await handle