From ae4a13b2499faad4f2d3a8be66784b8f8a3ba06b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 25 Oct 2023 18:32:07 +0530 Subject: [PATCH] Better fix for macOS deadlock Fix it in glfw. Dont hold the tick lock when calling the tick callback as the tick callback might be waiting on a lock. --- glfw/cocoa_init.m | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/glfw/cocoa_init.m b/glfw/cocoa_init.m index dc5df1382..2e40db560 100644 --- a/glfw/cocoa_init.m +++ b/glfw/cocoa_init.m @@ -1020,12 +1020,15 @@ static NSLock *tick_lock = NULL; void _glfwDispatchTickCallback(void) { if (tick_lock && tick_callback) { - [tick_lock lock]; - while(tick_callback_requested) { + while(true) { + bool do_call = true; + [tick_lock lock]; + if (!tick_callback_requested) do_call = false; tick_callback_requested = false; - tick_callback(tick_callback_data); + [tick_lock unlock]; + if (do_call) tick_callback(tick_callback_data); + else break; } - [tick_lock unlock]; } }