Module: wine Branch: master Commit: 26e3d2ecedb4f48d0002b7e75dd4d80eb00b54a9 URL: https://gitlab.winehq.org/wine/wine/-/commit/26e3d2ecedb4f48d0002b7e75dd4d80...
Author: Alexandros Frantzis alexandros.frantzis@collabora.com Date: Tue Feb 6 18:01:59 2024 +0200
win32u: Use consistent locking order for display related mutexes.
Most paths that hold both the display_lock and the display_devices_init mutex acquire them in the order just mentioned. However, there are two cases where these are acquired in the opposite order, which with unfortunate thread interactions and timings can lead to a deadlock. Fix these cases to use the same order as the rest of the code.
---
dlls/win32u/sysparams.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c index 9a43de8fd76..673082056b1 100644 --- a/dlls/win32u/sysparams.c +++ b/dlls/win32u/sysparams.c @@ -1251,8 +1251,8 @@ static void add_gpu( const struct gdi_gpu *gpu, void *param )
if (!ctx->mutex) { - ctx->mutex = get_display_device_init_mutex(); pthread_mutex_lock( &display_lock ); + ctx->mutex = get_display_device_init_mutex(); prepare_devices(); }
@@ -1717,8 +1717,8 @@ static BOOL update_display_cache_from_registry(void)
if (key.LastWriteTime.QuadPart <= last_query_display_time) return TRUE;
- mutex = get_display_device_init_mutex(); pthread_mutex_lock( &display_lock ); + mutex = get_display_device_init_mutex();
clear_display_devices();