[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