Jacek Caban : winex11: Use pthread for xrandr locking.

Alexandre Julliard julliard at winehq.org
Mon Apr 18 16:08:47 CDT 2022


Module: wine
Branch: master
Commit: 95825139b8f65cb8dae843c2e6ed407024358729
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=95825139b8f65cb8dae843c2e6ed407024358729

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Apr 18 14:41:30 2022 +0200

winex11: Use pthread for xrandr locking.

Signed-off-by: Jacek Caban <jacek at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/winex11.drv/xrandr.c | 27 ++++++++++-----------------
 1 file changed, 10 insertions(+), 17 deletions(-)

diff --git a/dlls/winex11.drv/xrandr.c b/dlls/winex11.drv/xrandr.c
index 9f58246979a..e97034fcb2c 100644
--- a/dlls/winex11.drv/xrandr.c
+++ b/dlls/winex11.drv/xrandr.c
@@ -334,22 +334,15 @@ static struct current_mode
 } *current_modes;
 static int current_mode_count;
 
-static CRITICAL_SECTION current_modes_section;
-static CRITICAL_SECTION_DEBUG current_modes_critsect_debug =
-{
-    0, 0, &current_modes_section,
-    {&current_modes_critsect_debug.ProcessLocksList, &current_modes_critsect_debug.ProcessLocksList},
-     0, 0, {(DWORD_PTR)(__FILE__ ": current_modes_section")}
-};
-static CRITICAL_SECTION current_modes_section = {&current_modes_critsect_debug, -1, 0, 0, 0, 0};
+static pthread_mutex_t xrandr_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static void xrandr14_invalidate_current_mode_cache(void)
 {
-    EnterCriticalSection( &current_modes_section );
+    pthread_mutex_lock( &xrandr_mutex );
     heap_free( current_modes);
     current_modes = NULL;
     current_mode_count = 0;
-    LeaveCriticalSection( &current_modes_section );
+    pthread_mutex_unlock( &xrandr_mutex );
 }
 
 static XRRScreenResources *xrandr_get_screen_resources(void)
@@ -1228,12 +1221,12 @@ static BOOL xrandr14_get_id( const WCHAR *device_name, ULONG_PTR *id )
         return FALSE;
 
     /* Update cache */
-    EnterCriticalSection( &current_modes_section );
+    pthread_mutex_lock( &xrandr_mutex );
     if (!current_modes)
     {
         if (!xrandr14_get_gpus2( &gpus, &gpu_count, FALSE ))
         {
-            LeaveCriticalSection( &current_modes_section );
+            pthread_mutex_unlock( &xrandr_mutex );
             return FALSE;
         }
 
@@ -1274,12 +1267,12 @@ static BOOL xrandr14_get_id( const WCHAR *device_name, ULONG_PTR *id )
 
     if (display_idx >= current_mode_count)
     {
-        LeaveCriticalSection( &current_modes_section );
+        pthread_mutex_unlock( &xrandr_mutex );
         return FALSE;
     }
 
     *id = current_modes[display_idx].id;
-    LeaveCriticalSection( &current_modes_section );
+    pthread_mutex_unlock( &xrandr_mutex );
     return TRUE;
 }
 
@@ -1440,7 +1433,7 @@ static BOOL xrandr14_get_current_mode( ULONG_PTR id, DEVMODEW *mode )
     RECT primary;
     INT mode_idx;
 
-    EnterCriticalSection( &current_modes_section );
+    pthread_mutex_lock( &xrandr_mutex );
     for (mode_idx = 0; mode_idx < current_mode_count; ++mode_idx)
     {
         if (current_modes[mode_idx].id != id)
@@ -1453,7 +1446,7 @@ static BOOL xrandr14_get_current_mode( ULONG_PTR id, DEVMODEW *mode )
         }
 
         memcpy( mode, &current_modes[mode_idx].mode, sizeof(*mode) );
-        LeaveCriticalSection( &current_modes_section );
+        pthread_mutex_unlock( &xrandr_mutex );
         return TRUE;
     }
 
@@ -1524,7 +1517,7 @@ done:
         mode_ptr->mode.dmDriverExtra = 0;
         mode_ptr->loaded = TRUE;
     }
-    LeaveCriticalSection( &current_modes_section );
+    pthread_mutex_unlock( &xrandr_mutex );
     if (crtc_info)
         pXRRFreeCrtcInfo( crtc_info );
     if (output_info)




More information about the wine-cvs mailing list