Skip to content

winebth.sys: Bug in winebth.sys + dbus crashing input handling #315

@JacKeTUs

Description

@JacKeTUs

Hello!
I started getting seemingly random device disconnects in games / in wine control joy.cpl - for 10-20 seconds it's working perfectly fine and after some time input is not registering and new devices are not appearing.

From logs i found this:

PROTON_LOG=1 WINEDEBUG="+dbus" protontrics -c "wine control joy.cpl" 1066890

00e4:trace:dbus:bluez_filter ({0x7f248014baf0 connected=1}, {signal sender=":1.5" interface="org.freedesktop.DBus.Properties" member="PropertiesChanged" path="/org/bluez/hci0" signature="sa{sv}as"}, 0x7f248007ccb0)
00e4:trace:dbus:bluez_radio_prop_from_dict_entry ("Discovering", 0x100ffe490, 0x100ffe4e8, 0x100ffe4e0, 0x3fd)
dbus[58589]: arguments to dbus_pending_call_set_notify() were incorrect, assertion "pending != NULL" failed in file ../../../dbus/dbus-pending-call.c line 655.
This is normally a bug in some application using the D-Bus library.
  D-Bus not built with -rdynamic so unable to print a backtrace
00e4:err:seh:call_seh_handlers invalid frame 0000000100FFDF60 (00000000026E2000-00000000028E0000)
00e4:err:seh:NtRaiseException Exception frame is not in stack limits => unable to dispatch exception.

And after that log i identified that my 'random' disconnects / stops of input handling are tied to bluez discovery interval. Disabling bluez lead to perfectly fine session in games / long enough staring at joy.cpl screen, but some games (simracing titles) are easier to play with wireless keyboard on the side, so it's not exactly ideal solution...

sudo dbus-monitor --system "path='/org/bluez/hci0'"

signal time=1772316172.954428 sender=:1.5 -> destination=(null destination) serial=1851 path=/org/bluez/hci0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.bluez.Adapter1"
   array [
      dict entry(
         string "Discovering"
         variant             boolean false
      )
   ]
   array [
   ]
...
method call time=1772316192.825234 sender=:1.66 -> destination=org.bluez serial=1940 path=/org/bluez/hci0; interface=org.bluez.Adapter1; member=StartDiscovery
signal time=1772316192.940475 sender=:1.5 -> destination=(null destination) serial=1858 path=/org/bluez/hci0; interface=org.freedesktop.DBus.Properties; member=PropertiesChanged
   string "org.bluez.Adapter1"
   array [
      dict entry(
         string "Discovering"
         variant             boolean true
      )
   ]
   array [
   ]

After digging some more, i found that there is a bug present in Proton version of Wine: it tries to notify dbus with NULL pending_call argument, seemingly crashing the input handling (and something else?), and it's fixed in upstream wine (https://gitlab.winehq.org/wine/wine/-/merge_requests/7302). Also there is a bunch of updates in winebth (https://gitlab.winehq.org/wine/wine/-/commits/master/dlls/winebth.sys), for almost a year.

Can you, please, update winebth.sys code, or at least cherry-pick https://gitlab.winehq.org/wine/wine/-/merge_requests/7302/diffs?commit_id=e79bf8390d93efedbc2c99d73450fd24c4877b94, so playing games with controllers with bluetooth enabled will be possible again?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions