Module: wine
Branch: master
Commit: 26e3d2ecedb4f48d0002b7e75dd4d80eb00b54a9
URL: https://gitlab.winehq.org/wine/wine/-/commit/26e3d2ecedb4f48d0002b7e75dd4d8…
Author: Alexandros Frantzis <alexandros.frantzis(a)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();