diff --git a/CHANGELOG.md b/CHANGELOG.md index 53caaba5..1a68d111 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,7 @@ Unreleased` header. # Unreleased - On Windows, fix deadlock when accessing the state during `Cursor{Enter,Leave}`. +- On macOS, fix deadlock when entering a nested event loop from an event handler. # 0.29.2 diff --git a/src/platform_impl/macos/app_state.rs b/src/platform_impl/macos/app_state.rs index a18ffebd..114c124f 100644 --- a/src/platform_impl/macos/app_state.rs +++ b/src/platform_impl/macos/app_state.rs @@ -494,9 +494,9 @@ impl AppState { // Return when in callback due to https://github.com/rust-windowing/winit/issues/1779 if panic_info.is_panicking() + || HANDLER.get_in_callback() || !HANDLER.have_callback() || !HANDLER.is_running() - || HANDLER.get_in_callback() { return; } @@ -601,9 +601,9 @@ impl AppState { // XXX: how does it make sense that `get_in_callback()` can ever return `true` here if we're // about to return to the `CFRunLoop` to poll for new events? if panic_info.is_panicking() + || HANDLER.get_in_callback() || !HANDLER.have_callback() || !HANDLER.is_running() - || HANDLER.get_in_callback() { return; }