Jacek Caban : gdi32: Use pthread mutex in driver.c.
Alexandre Julliard
julliard at winehq.org
Mon Oct 4 15:42:19 CDT 2021
Module: wine
Branch: master
Commit: 2e14044691ac73f94d54d35024e8e6740d1bc3c7
URL: https://source.winehq.org/git/wine.git/?a=commit;h=2e14044691ac73f94d54d35024e8e6740d1bc3c7
Author: Jacek Caban <jacek at codeweavers.com>
Date: Mon Oct 4 15:03:13 2021 +0100
gdi32: Use pthread mutex in driver.c.
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/gdi32/Makefile.in | 2 +-
dlls/gdi32/driver.c | 31 +++++++++++++------------------
2 files changed, 14 insertions(+), 19 deletions(-)
diff --git a/dlls/gdi32/Makefile.in b/dlls/gdi32/Makefile.in
index a1b153edf07..6a5df55bfeb 100644
--- a/dlls/gdi32/Makefile.in
+++ b/dlls/gdi32/Makefile.in
@@ -3,7 +3,7 @@ MODULE = gdi32.dll
IMPORTLIB = gdi32
IMPORTS = advapi32
EXTRAINCL = $(FREETYPE_CFLAGS) $(FONTCONFIG_CFLAGS)
-EXTRALIBS = $(CARBON_LIBS) $(APPKIT_LIBS)
+EXTRALIBS = $(CARBON_LIBS) $(APPKIT_LIBS) $(PTHREAD_LIBS)
DELAYIMPORTS = setupapi
C_SRCS = \
diff --git a/dlls/gdi32/driver.c b/dlls/gdi32/driver.c
index 24b8a6b27b5..849be65c480 100644
--- a/dlls/gdi32/driver.c
+++ b/dlls/gdi32/driver.c
@@ -27,6 +27,8 @@
#include <stdarg.h>
#include <string.h>
#include <stdio.h>
+#include <pthread.h>
+
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -59,14 +61,7 @@ const struct gdi_dc_funcs *driver_funcs;
static struct list d3dkmt_adapters = LIST_INIT( d3dkmt_adapters );
static struct list d3dkmt_devices = LIST_INIT( d3dkmt_devices );
-static CRITICAL_SECTION driver_section;
-static CRITICAL_SECTION_DEBUG critsect_debug =
-{
- 0, 0, &driver_section,
- { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList },
- 0, 0, { (DWORD_PTR)(__FILE__ ": driver_section") }
-};
-static CRITICAL_SECTION driver_section = { &critsect_debug, -1, 0, 0, 0, 0 };
+static pthread_mutex_t driver_lock = PTHREAD_MUTEX_INITIALIZER;
/**********************************************************************
* get_display_driver
@@ -802,7 +797,7 @@ NTSTATUS WINAPI NtGdiDdDDICloseAdapter( const D3DKMT_CLOSEADAPTER *desc )
if (!desc || !desc->hAdapter)
return STATUS_INVALID_PARAMETER;
- EnterCriticalSection( &driver_section );
+ pthread_mutex_lock( &driver_lock );
LIST_FOR_EACH_ENTRY( adapter, &d3dkmt_adapters, struct d3dkmt_adapter, entry )
{
if (adapter->handle == desc->hAdapter)
@@ -813,7 +808,7 @@ NTSTATUS WINAPI NtGdiDdDDICloseAdapter( const D3DKMT_CLOSEADAPTER *desc )
break;
}
}
- LeaveCriticalSection( &driver_section );
+ pthread_mutex_unlock( &driver_lock );
return status;
}
@@ -848,10 +843,10 @@ NTSTATUS WINAPI NtGdiDdDDIOpenAdapterFromLuid( D3DKMT_OPENADAPTERFROMLUID *desc
if (!(adapter = malloc( sizeof( *adapter ) ))) return STATUS_NO_MEMORY;
- EnterCriticalSection( &driver_section );
+ pthread_mutex_lock( &driver_lock );
desc->hAdapter = adapter->handle = ++handle_start;
list_add_tail( &d3dkmt_adapters, &adapter->entry );
- LeaveCriticalSection( &driver_section );
+ pthread_mutex_unlock( &driver_lock );
return STATUS_SUCCESS;
}
@@ -870,7 +865,7 @@ NTSTATUS WINAPI NtGdiDdDDICreateDevice( D3DKMT_CREATEDEVICE *desc )
if (!desc)
return STATUS_INVALID_PARAMETER;
- EnterCriticalSection( &driver_section );
+ pthread_mutex_lock( &driver_lock );
LIST_FOR_EACH_ENTRY( adapter, &d3dkmt_adapters, struct d3dkmt_adapter, entry )
{
if (adapter->handle == desc->hAdapter)
@@ -879,7 +874,7 @@ NTSTATUS WINAPI NtGdiDdDDICreateDevice( D3DKMT_CREATEDEVICE *desc )
break;
}
}
- LeaveCriticalSection( &driver_section );
+ pthread_mutex_unlock( &driver_lock );
if (!found)
return STATUS_INVALID_PARAMETER;
@@ -891,10 +886,10 @@ NTSTATUS WINAPI NtGdiDdDDICreateDevice( D3DKMT_CREATEDEVICE *desc )
if (!device)
return STATUS_NO_MEMORY;
- EnterCriticalSection( &driver_section );
+ pthread_mutex_lock( &driver_lock );
device->handle = ++handle_start;
list_add_tail( &d3dkmt_devices, &device->entry );
- LeaveCriticalSection( &driver_section );
+ pthread_mutex_unlock( &driver_lock );
desc->hDevice = device->handle;
return STATUS_SUCCESS;
@@ -914,7 +909,7 @@ NTSTATUS WINAPI NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc )
if (!desc || !desc->hDevice)
return STATUS_INVALID_PARAMETER;
- EnterCriticalSection( &driver_section );
+ pthread_mutex_lock( &driver_lock );
LIST_FOR_EACH_ENTRY( device, &d3dkmt_devices, struct d3dkmt_device, entry )
{
if (device->handle == desc->hDevice)
@@ -928,7 +923,7 @@ NTSTATUS WINAPI NtGdiDdDDIDestroyDevice( const D3DKMT_DESTROYDEVICE *desc )
break;
}
}
- LeaveCriticalSection( &driver_section );
+ pthread_mutex_unlock( &driver_lock );
return status;
}
More information about the wine-cvs
mailing list