Commit e72d0385 authored by Damien George's avatar Damien George

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: default avatarDamien George <damien@micropython.org>
parent 02df2b09
......@@ -63,6 +63,11 @@ void mp_bluetooth_nimble_port_start(void) {
void mp_bluetooth_nimble_port_shutdown(void) {
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).
// Calls ble_hs_stop() and waits for stack shutdown.
nimble_port_stop();
......@@ -70,6 +75,10 @@ void mp_bluetooth_nimble_port_shutdown(void) {
// Shuts down the event queue.
nimble_port_deinit();
#if MICROPY_PY_BLUETOOTH_USE_SYNC_EVENTS_WITH_INTERLOCK
MP_THREAD_GIL_ENTER();
#endif
// Mark stack as shutdown.
mp_bluetooth_nimble_ble_state = MP_BLUETOOTH_NIMBLE_BLE_STATE_OFF;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment