Rémi Bernon : winebus.sys: Use a pthread_mutex_t instead of CRITICAL_SECTION.
Alexandre Julliard
julliard at winehq.org
Fri Sep 17 16:03:07 CDT 2021
Module: wine
Branch: master
Commit: cc2f669390c051f972c8eea48dee9f8d0a820d84
URL: https://source.winehq.org/git/wine.git/?a=commit;h=cc2f669390c051f972c8eea48dee9f8d0a820d84
Author: Rémi Bernon <rbernon at codeweavers.com>
Date: Fri Sep 17 08:50:33 2021 +0200
winebus.sys: Use a pthread_mutex_t instead of CRITICAL_SECTION.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/winebus.sys/Makefile.in | 2 +-
dlls/winebus.sys/bus_iohid.c | 19 +++++++------------
dlls/winebus.sys/bus_sdl.c | 20 +++++++-------------
dlls/winebus.sys/bus_udev.c | 35 +++++++++++++++--------------------
4 files changed, 30 insertions(+), 46 deletions(-)
diff --git a/dlls/winebus.sys/Makefile.in b/dlls/winebus.sys/Makefile.in
index 1675bf1951c..ec731c2b85c 100644
--- a/dlls/winebus.sys/Makefile.in
+++ b/dlls/winebus.sys/Makefile.in
@@ -1,6 +1,6 @@
MODULE = winebus.sys
IMPORTS = ntoskrnl advapi32
-EXTRALIBS = $(IOKIT_LIBS) $(UDEV_LIBS)
+EXTRALIBS = $(IOKIT_LIBS) $(UDEV_LIBS) $(PTHREAD_LIBS)
EXTRAINCL = $(UDEV_CFLAGS) $(SDL2_CFLAGS)
EXTRADLLFLAGS = -mno-cygwin -Wl,--subsystem,native
diff --git a/dlls/winebus.sys/bus_iohid.c b/dlls/winebus.sys/bus_iohid.c
index 70a7cd0b005..8dc9e6c3df1 100644
--- a/dlls/winebus.sys/bus_iohid.c
+++ b/dlls/winebus.sys/bus_iohid.c
@@ -83,6 +83,8 @@
#undef PAGE_SHIFT
#endif /* HAVE_IOKIT_HID_IOHIDLIB_H */
+#include <pthread.h>
+
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -98,14 +100,7 @@
WINE_DEFAULT_DEBUG_CHANNEL(plugplay);
#ifdef HAVE_IOHIDMANAGERCREATE
-static CRITICAL_SECTION iohid_cs;
-static CRITICAL_SECTION_DEBUG iohid_cs_debug =
-{
- 0, 0, &iohid_cs,
- { &iohid_cs_debug.ProcessLocksList, &iohid_cs_debug.ProcessLocksList },
- 0, 0, { (DWORD_PTR)(__FILE__ ": iohid_cs") }
-};
-static CRITICAL_SECTION iohid_cs = { &iohid_cs_debug, -1, 0, 0, 0, 0 };
+static pthread_mutex_t iohid_cs = PTHREAD_MUTEX_INITIALIZER;
static IOHIDManagerRef hid_manager;
static CFRunLoopRef run_loop;
@@ -184,9 +179,9 @@ static void iohid_device_stop(struct unix_device *iface)
IOHIDDeviceRegisterInputReportCallback(private->device, NULL, 0, NULL, NULL);
- RtlEnterCriticalSection(&iohid_cs);
+ pthread_mutex_lock(&iohid_cs);
list_remove(&private->unix_device.entry);
- RtlLeaveCriticalSection(&iohid_cs);
+ pthread_mutex_unlock(&iohid_cs);
}
static NTSTATUS iohid_device_get_report_descriptor(struct unix_device *iface, BYTE *buffer,
@@ -407,9 +402,9 @@ NTSTATUS WINAPI iohid_bus_wait(void *args)
do
{
if (bus_event_queue_pop(&event_queue, result)) return STATUS_PENDING;
- RtlEnterCriticalSection(&iohid_cs);
+ pthread_mutex_lock(&iohid_cs);
ret = CFRunLoopRunInMode(kCFRunLoopDefaultMode, 10, TRUE);
- RtlLeaveCriticalSection(&iohid_cs);
+ pthread_mutex_unlock(&iohid_cs);
} while (ret != kCFRunLoopRunStopped);
TRACE("IOHID main loop exiting\n");
diff --git a/dlls/winebus.sys/bus_sdl.c b/dlls/winebus.sys/bus_sdl.c
index 956340faf02..b7c3b28ba4e 100644
--- a/dlls/winebus.sys/bus_sdl.c
+++ b/dlls/winebus.sys/bus_sdl.c
@@ -35,6 +35,8 @@
# include <SDL.h>
#endif
+#include <pthread.h>
+
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -62,15 +64,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(plugplay);
WINE_DECLARE_DEBUG_CHANNEL(hid_report);
-static CRITICAL_SECTION sdl_cs;
-static CRITICAL_SECTION_DEBUG sdl_cs_debug =
-{
- 0, 0, &sdl_cs,
- { &sdl_cs_debug.ProcessLocksList, &sdl_cs_debug.ProcessLocksList },
- 0, 0, { (DWORD_PTR)(__FILE__ ": sdl_cs") }
-};
-static CRITICAL_SECTION sdl_cs = { &sdl_cs_debug, -1, 0, 0, 0, 0 };
-
+static pthread_mutex_t sdl_cs = PTHREAD_MUTEX_INITIALIZER;
static const WCHAR sdl_busidW[] = {'S','D','L','J','O','Y',0};
static struct sdl_bus_options options;
@@ -513,9 +507,9 @@ static void sdl_device_stop(struct unix_device *iface)
if (private->sdl_controller) pSDL_GameControllerClose(private->sdl_controller);
if (private->sdl_haptic) pSDL_HapticClose(private->sdl_haptic);
- RtlEnterCriticalSection(&sdl_cs);
+ pthread_mutex_lock(&sdl_cs);
list_remove(&private->unix_device.entry);
- RtlLeaveCriticalSection(&sdl_cs);
+ pthread_mutex_unlock(&sdl_cs);
}
static NTSTATUS sdl_device_get_reportdescriptor(struct unix_device *iface, BYTE *buffer,
@@ -787,7 +781,7 @@ static void process_device_event(SDL_Event *event)
TRACE_(hid_report)("Received action %x\n", event->type);
- RtlEnterCriticalSection(&sdl_cs);
+ pthread_mutex_lock(&sdl_cs);
if (event->type == SDL_JOYDEVICEADDED)
sdl_add_device(((SDL_JoyDeviceEvent *)event)->which);
@@ -813,7 +807,7 @@ static void process_device_event(SDL_Event *event)
else WARN("failed to find device with id %d\n", id);
}
- RtlLeaveCriticalSection(&sdl_cs);
+ pthread_mutex_unlock(&sdl_cs);
}
NTSTATUS WINAPI sdl_bus_init(void *args)
diff --git a/dlls/winebus.sys/bus_udev.c b/dlls/winebus.sys/bus_udev.c
index 928548b8893..c73a6dd2259 100644
--- a/dlls/winebus.sys/bus_udev.c
+++ b/dlls/winebus.sys/bus_udev.c
@@ -58,6 +58,8 @@
# endif
#endif
+#include <pthread.h>
+
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -91,14 +93,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(plugplay);
WINE_DECLARE_DEBUG_CHANNEL(hid_report);
-static CRITICAL_SECTION udev_cs;
-static CRITICAL_SECTION_DEBUG udev_cs_debug =
-{
- 0, 0, &udev_cs,
- { &udev_cs_debug.ProcessLocksList, &udev_cs_debug.ProcessLocksList },
- 0, 0, { (DWORD_PTR)(__FILE__ ": udev_cs") }
-};
-static CRITICAL_SECTION udev_cs = { &udev_cs_debug, -1, 0, 0, 0, 0 };
+static pthread_mutex_t udev_cs = PTHREAD_MUTEX_INITIALIZER;
static struct udev *udev_context = NULL;
static struct udev_monitor *udev_monitor;
@@ -622,9 +617,9 @@ static void hidraw_device_destroy(struct unix_device *iface)
static NTSTATUS hidraw_device_start(struct unix_device *iface)
{
- RtlEnterCriticalSection(&udev_cs);
+ pthread_mutex_lock(&udev_cs);
start_polling_device(iface);
- RtlLeaveCriticalSection(&udev_cs);
+ pthread_mutex_unlock(&udev_cs);
return STATUS_SUCCESS;
}
@@ -632,10 +627,10 @@ static void hidraw_device_stop(struct unix_device *iface)
{
struct platform_private *private = impl_from_unix_device(iface);
- RtlEnterCriticalSection(&udev_cs);
+ pthread_mutex_lock(&udev_cs);
stop_polling_device(iface);
list_remove(&private->unix_device.entry);
- RtlLeaveCriticalSection(&udev_cs);
+ pthread_mutex_unlock(&udev_cs);
}
static NTSTATUS hidraw_device_get_report_descriptor(struct unix_device *iface, BYTE *buffer,
@@ -824,9 +819,9 @@ static NTSTATUS lnxev_device_start(struct unix_device *iface)
if ((status = build_report_descriptor(ext, ext->base.udev_device)))
return status;
- RtlEnterCriticalSection(&udev_cs);
+ pthread_mutex_lock(&udev_cs);
start_polling_device(iface);
- RtlLeaveCriticalSection(&udev_cs);
+ pthread_mutex_unlock(&udev_cs);
return STATUS_SUCCESS;
}
@@ -834,10 +829,10 @@ static void lnxev_device_stop(struct unix_device *iface)
{
struct wine_input_private *ext = input_impl_from_unix_device(iface);
- RtlEnterCriticalSection(&udev_cs);
+ pthread_mutex_lock(&udev_cs);
stop_polling_device(iface);
list_remove(&ext->base.unix_device.entry);
- RtlLeaveCriticalSection(&udev_cs);
+ pthread_mutex_unlock(&udev_cs);
}
static NTSTATUS lnxev_device_get_report_descriptor(struct unix_device *iface, BYTE *buffer,
@@ -1246,16 +1241,16 @@ NTSTATUS WINAPI udev_bus_wait(void *args)
{
if (bus_event_queue_pop(&event_queue, result)) return STATUS_PENDING;
- RtlEnterCriticalSection(&udev_cs);
+ pthread_mutex_lock(&udev_cs);
while (close_count--) close(close_fds[close_count]);
memcpy(pfd, poll_fds, poll_count * sizeof(*pfd));
count = poll_count;
close_count = 0;
- RtlLeaveCriticalSection(&udev_cs);
+ pthread_mutex_unlock(&udev_cs);
while (poll(pfd, count, -1) <= 0) {}
- RtlEnterCriticalSection(&udev_cs);
+ pthread_mutex_lock(&udev_cs);
if (pfd[0].revents) process_monitor_event(udev_monitor);
if (pfd[1].revents) read(deviceloop_control[0], &ctrl, 1);
for (i = 2; i < count; ++i)
@@ -1264,7 +1259,7 @@ NTSTATUS WINAPI udev_bus_wait(void *args)
device = find_device_from_fd(pfd[i].fd);
if (device) device->read_report(&device->unix_device);
}
- RtlLeaveCriticalSection(&udev_cs);
+ pthread_mutex_unlock(&udev_cs);
}
TRACE("UDEV main loop exiting\n");
More information about the wine-cvs
mailing list