[PATCH 1/5] winebus.sys: Pass a struct bus_event pointer to bus_wait.
Rémi Bernon
rbernon at codeweavers.com
Mon Aug 30 04:22:51 CDT 2021
Allocated on the caller side.
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/winebus.sys/main.c | 13 ++++++++++++-
dlls/winebus.sys/unixlib.h | 10 ++++++++++
2 files changed, 22 insertions(+), 1 deletion(-)
diff --git a/dlls/winebus.sys/main.c b/dlls/winebus.sys/main.c
index e9c85deb846..973931fe517 100644
--- a/dlls/winebus.sys/main.c
+++ b/dlls/winebus.sys/main.c
@@ -632,6 +632,7 @@ struct bus_main_params
HANDLE init_done;
unsigned int init_code;
unsigned int wait_code;
+ struct bus_event *bus_event;
};
static DWORD CALLBACK bus_main_thread(void *args)
@@ -644,11 +645,13 @@ static DWORD CALLBACK bus_main_thread(void *args)
SetEvent(bus.init_done);
TRACE("%s main loop started\n", debugstr_w(bus.name));
+ bus.bus_event->type = BUS_EVENT_TYPE_NONE;
if (status) WARN("%s bus init returned status %#x\n", debugstr_w(bus.name), status);
- else status = winebus_call(bus.wait_code, NULL);
+ else while ((status = winebus_call(bus.wait_code, bus.bus_event)) == STATUS_PENDING) {}
if (status) WARN("%s bus wait returned status %#x\n", debugstr_w(bus.name), status);
else TRACE("%s main loop exited\n", debugstr_w(bus.name));
+ HeapFree(GetProcessHeap(), 0, bus.bus_event);
return status;
}
@@ -663,6 +666,14 @@ static NTSTATUS bus_main_thread_start(struct bus_main_params *bus)
return STATUS_UNSUCCESSFUL;
}
+ if (!(bus->bus_event = HeapAlloc(GetProcessHeap(), 0, sizeof(struct bus_event))))
+ {
+ ERR("failed to allocate %s bus event.\n", debugstr_w(bus->name));
+ CloseHandle(bus->init_done);
+ bus_count--;
+ return STATUS_UNSUCCESSFUL;
+ }
+
if (!(bus_thread[i] = CreateThread(NULL, 0, bus_main_thread, bus, 0, NULL)))
{
ERR("failed to create %s bus thread.\n", debugstr_w(bus->name));
diff --git a/dlls/winebus.sys/unixlib.h b/dlls/winebus.sys/unixlib.h
index c0de991d20a..e6abd98601f 100644
--- a/dlls/winebus.sys/unixlib.h
+++ b/dlls/winebus.sys/unixlib.h
@@ -46,6 +46,16 @@ struct iohid_bus_options
struct unix_device;
+enum bus_event_type
+{
+ BUS_EVENT_TYPE_NONE,
+};
+
+struct bus_event
+{
+ enum bus_event_type type;
+};
+
enum unix_funcs
{
sdl_init,
--
2.33.0
More information about the wine-devel
mailing list