Esme Povirk (@madewokherd) commented about dlls/uiautomationcore/uia_event.c:
+ EnterCriticalSection(&event_thread_cs); + if (event_queue != event_thread.event_queue) + { + *event_thread_shutdown = TRUE; + LeaveCriticalSection(&event_thread_cs); + } + } + + if (!list_empty(event_queue)) + { + queue_event = LIST_ENTRY(list_head(event_queue), struct uia_queue_event, event_queue_entry); + list_remove(list_head(event_queue)); + } + + if (!*event_thread_shutdown) + LeaveCriticalSection(&event_thread_cs); I don't think the very slight optimization here is worth the complexity of two different LeaveCriticalSection calls.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/3119#note_36346