esp32/mpnimbleport: Release the GIL while doing NimBLE port deinit.
In case callbacks must run (eg a disconnect event happens during the deinit) and the GIL must be obtained to run the callback. Fixes part of issue #12349. Signed-off-by: Damien George <damien@micropython.org>
This commit is contained in:
parent
34097b776e
commit
c27d304bed
@ -63,6 +63,11 @@ void mp_bluetooth_nimble_port_start(void) {
|
|||||||
void mp_bluetooth_nimble_port_shutdown(void) {
|
void mp_bluetooth_nimble_port_shutdown(void) {
|
||||||
DEBUG_printf("mp_bluetooth_nimble_port_shutdown\n");
|
DEBUG_printf("mp_bluetooth_nimble_port_shutdown\n");
|
||||||
|
|
||||||
|
#if MICROPY_PY_BLUETOOTH_USE_SYNC_EVENTS_WITH_INTERLOCK
|
||||||
|
// Release the GIL so any callbacks can run during the shutdown calls below.
|
||||||
|
MP_THREAD_GIL_EXIT();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Despite the name, these is an ESP32-specific (no other NimBLE ports have these functions).
|
// Despite the name, these is an ESP32-specific (no other NimBLE ports have these functions).
|
||||||
// Calls ble_hs_stop() and waits for stack shutdown.
|
// Calls ble_hs_stop() and waits for stack shutdown.
|
||||||
nimble_port_stop();
|
nimble_port_stop();
|
||||||
@ -70,6 +75,10 @@ void mp_bluetooth_nimble_port_shutdown(void) {
|
|||||||
// Shuts down the event queue.
|
// Shuts down the event queue.
|
||||||
nimble_port_deinit();
|
nimble_port_deinit();
|
||||||
|
|
||||||
|
#if MICROPY_PY_BLUETOOTH_USE_SYNC_EVENTS_WITH_INTERLOCK
|
||||||
|
MP_THREAD_GIL_ENTER();
|
||||||
|
#endif
|
||||||
|
|
||||||
// Mark stack as shutdown.
|
// Mark stack as shutdown.
|
||||||
mp_bluetooth_nimble_ble_state = MP_BLUETOOTH_NIMBLE_BLE_STATE_OFF;
|
mp_bluetooth_nimble_ble_state = MP_BLUETOOTH_NIMBLE_BLE_STATE_OFF;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user