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.
This commit is contained in:
Alexandros Frantzis 2024-02-06 18:01:59 +02:00 committed by Alexandre Julliard
parent c8bf3ba2da
commit 26e3d2eced

View file

@ -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();