Rémi Bernon : winebus.sys: Pass a struct bus_event pointer to bus_wait.

Alexandre Julliard julliard at winehq.org
Thu Sep 2 15:45:30 CDT 2021


Module: wine
Branch: master
Commit: f6d567d3e34d0a53220847c590a681854b91c667
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f6d567d3e34d0a53220847c590a681854b91c667

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Mon Aug 30 11:22:51 2021 +0200

winebus.sys: Pass a struct bus_event pointer to bus_wait.

Allocated on the caller side.

Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 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 28bbb5ff7a9..4c8c84ffe9b 100644
--- a/dlls/winebus.sys/main.c
+++ b/dlls/winebus.sys/main.c
@@ -648,6 +648,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)
@@ -660,11 +661,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;
 }
 
@@ -679,6 +682,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,




More information about the wine-cvs mailing list