extmod/bluetooth: handling of disconnect in ble_simple_central.py example is misleading
The handling of the disconnect event in ble_simple_central.py is misleading. The condition if conn_handle == self._conn_handle:
(line 108) makes it look as if a different value for conn_handle would mean that there's nothing to do, but this is not the case. In particular, a disconnect can happen during the connection process, at least with nimble on the esp32, in which case self._conn_handle is still None and conn_handle != self._conn_handle but calling self._reset() is necessary.
https://github.com/micropython/micropython/blob/203e1d2a65273db3f6ff063ba1124a89c3482c0f/examples/bluetooth/ble_simple_central.py#L108
aioble/peripheral: Handle immediate disconnect.
If the client disconnects immediately after connection, the irq can be run before the initial connect handler has finished.
+1
Thanks @andrewleech
I think maybe this could just be simplified by having
DeviceConnection::__init__always unconditionally create the event. I'm not sure I can see any code paths now that don't end up initialisingself._eventanyway. i.e. construction of aDeviceConnectionfor either a central or a peripheral will always end up needing to initialise the event. So we'll always have to do this allocation regardless, might as well do it up-front.Then we can get rid of all the various places that create-or-reuse the event...less code overall.