winex11: Use pthread for xrandr locking.
Signed-off-by: Jacek Caban <jacek@codeweavers.com> Signed-off-by: Huw Davies <huw@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
9a320b3938
commit
95825139b8
|
@ -334,22 +334,15 @@ static struct current_mode
|
||||||
} *current_modes;
|
} *current_modes;
|
||||||
static int current_mode_count;
|
static int current_mode_count;
|
||||||
|
|
||||||
static CRITICAL_SECTION current_modes_section;
|
static pthread_mutex_t xrandr_mutex = PTHREAD_MUTEX_INITIALIZER;
|
||||||
static CRITICAL_SECTION_DEBUG current_modes_critsect_debug =
|
|
||||||
{
|
|
||||||
0, 0, ¤t_modes_section,
|
|
||||||
{¤t_modes_critsect_debug.ProcessLocksList, ¤t_modes_critsect_debug.ProcessLocksList},
|
|
||||||
0, 0, {(DWORD_PTR)(__FILE__ ": current_modes_section")}
|
|
||||||
};
|
|
||||||
static CRITICAL_SECTION current_modes_section = {¤t_modes_critsect_debug, -1, 0, 0, 0, 0};
|
|
||||||
|
|
||||||
static void xrandr14_invalidate_current_mode_cache(void)
|
static void xrandr14_invalidate_current_mode_cache(void)
|
||||||
{
|
{
|
||||||
EnterCriticalSection( ¤t_modes_section );
|
pthread_mutex_lock( &xrandr_mutex );
|
||||||
heap_free( current_modes);
|
heap_free( current_modes);
|
||||||
current_modes = NULL;
|
current_modes = NULL;
|
||||||
current_mode_count = 0;
|
current_mode_count = 0;
|
||||||
LeaveCriticalSection( ¤t_modes_section );
|
pthread_mutex_unlock( &xrandr_mutex );
|
||||||
}
|
}
|
||||||
|
|
||||||
static XRRScreenResources *xrandr_get_screen_resources(void)
|
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;
|
return FALSE;
|
||||||
|
|
||||||
/* Update cache */
|
/* Update cache */
|
||||||
EnterCriticalSection( ¤t_modes_section );
|
pthread_mutex_lock( &xrandr_mutex );
|
||||||
if (!current_modes)
|
if (!current_modes)
|
||||||
{
|
{
|
||||||
if (!xrandr14_get_gpus2( &gpus, &gpu_count, FALSE ))
|
if (!xrandr14_get_gpus2( &gpus, &gpu_count, FALSE ))
|
||||||
{
|
{
|
||||||
LeaveCriticalSection( ¤t_modes_section );
|
pthread_mutex_unlock( &xrandr_mutex );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1274,12 +1267,12 @@ static BOOL xrandr14_get_id( const WCHAR *device_name, ULONG_PTR *id )
|
||||||
|
|
||||||
if (display_idx >= current_mode_count)
|
if (display_idx >= current_mode_count)
|
||||||
{
|
{
|
||||||
LeaveCriticalSection( ¤t_modes_section );
|
pthread_mutex_unlock( &xrandr_mutex );
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
*id = current_modes[display_idx].id;
|
*id = current_modes[display_idx].id;
|
||||||
LeaveCriticalSection( ¤t_modes_section );
|
pthread_mutex_unlock( &xrandr_mutex );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1440,7 +1433,7 @@ static BOOL xrandr14_get_current_mode( ULONG_PTR id, DEVMODEW *mode )
|
||||||
RECT primary;
|
RECT primary;
|
||||||
INT mode_idx;
|
INT mode_idx;
|
||||||
|
|
||||||
EnterCriticalSection( ¤t_modes_section );
|
pthread_mutex_lock( &xrandr_mutex );
|
||||||
for (mode_idx = 0; mode_idx < current_mode_count; ++mode_idx)
|
for (mode_idx = 0; mode_idx < current_mode_count; ++mode_idx)
|
||||||
{
|
{
|
||||||
if (current_modes[mode_idx].id != id)
|
if (current_modes[mode_idx].id != id)
|
||||||
|
@ -1453,7 +1446,7 @@ static BOOL xrandr14_get_current_mode( ULONG_PTR id, DEVMODEW *mode )
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy( mode, ¤t_modes[mode_idx].mode, sizeof(*mode) );
|
memcpy( mode, ¤t_modes[mode_idx].mode, sizeof(*mode) );
|
||||||
LeaveCriticalSection( ¤t_modes_section );
|
pthread_mutex_unlock( &xrandr_mutex );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1524,7 +1517,7 @@ done:
|
||||||
mode_ptr->mode.dmDriverExtra = 0;
|
mode_ptr->mode.dmDriverExtra = 0;
|
||||||
mode_ptr->loaded = TRUE;
|
mode_ptr->loaded = TRUE;
|
||||||
}
|
}
|
||||||
LeaveCriticalSection( ¤t_modes_section );
|
pthread_mutex_unlock( &xrandr_mutex );
|
||||||
if (crtc_info)
|
if (crtc_info)
|
||||||
pXRRFreeCrtcInfo( crtc_info );
|
pXRRFreeCrtcInfo( crtc_info );
|
||||||
if (output_info)
|
if (output_info)
|
||||||
|
|
Loading…
Reference in New Issue