esphome/esphome/components/bedjet
Joe 7963abb27a
Fix BedJet setup priority [fixes esphome/issues#3807] (#4677)
There is a race condition where a BedJet unit previously had its BLE
"notify" flag enabled, and it continues to broadcast these notify
packets even after the ESP32 (and BLEClient) goes away, such as during
a crash or unplugging power.

BLEClient::setup_priority=AFTER_BLUETOOTH, while
BedJetHub::setup_priority=AFTER_WIFI. When the ESP32 starts back up
again, BLEClient::setup() happens first and will start receiving the
BLE notify packets almost immediately. Since we register the BLEClient
child from codegen, BedJetHub is registered as a child already by this
point, so BLEClient dispatches the notify status packet (and other gatt
events) to the BedJetHub handler, even though BedJetHub::setup() has
not been called yet.

We initialize BedJetHub::codec_ in setup(), so if BLEClient starts
dispatching gatt events before setup() is called, then codec_ will not
be initialized yet. This causes BedJetHub's gatt notify handler to call
`this->codec_->decode_notify()` on an uninitialized null pointer. Since
invoking a method does not have to dereference the pointer, that method
invocation is allowed; but later trying to access memory on that
instance results in a StoreProhibited panic.

Changing the BedJetHub's setup_priority to BLUETOOTH causes it to be
setup before BLEClient, so that by the time BLEClient starts to receive
BLE packets, BedJetHub is ready to receive them.
2023-04-12 08:33:15 +00:00
..
climate Add BedJet Fan child component (#3735) 2022-08-31 13:53:18 +12:00
fan Fix off-by-one bedjet fan speed (#3873) (#4292) 2023-01-16 13:27:34 +13:00
__init__.py Refactor BedJet climate into Hub component (#3522) 2022-08-09 10:14:37 +12:00
bedjet_child.h Refactor BedJet climate into Hub component (#3522) 2022-08-09 10:14:37 +12:00
bedjet_codec.cpp Refactor BedJet climate into Hub component (#3522) 2022-08-09 10:14:37 +12:00
bedjet_codec.h Refactor BedJet climate into Hub component (#3522) 2022-08-09 10:14:37 +12:00
bedjet_const.h Add BedJet Fan child component (#3735) 2022-08-31 13:53:18 +12:00
bedjet_hub.cpp Fixed PlatformIO Build on DEV (#4422) 2023-02-13 15:43:52 +13:00
bedjet_hub.h Fix BedJet setup priority [fixes esphome/issues#3807] (#4677) 2023-04-12 08:33:15 +00:00