Root cause:

AuthRobot._enrollDevicesIdle() in js/ui/status/thunderbolt.js is
declared async but is registered with ordinary GLib.idle_add(). During
enrollDevice() D-Bus authorization, the function returns a Promise
rather than a synchronous GSource continuation value. The same idle
source is then repeatedly dispatched while the Promise is pending. After
the queue is drained, it repeatedly enters the empty-queue path, causing
GNOME Shell's zero-timeout main-loop spin and unresponsiveness.

Fix:

Make _enrollDevicesIdle() a synchronous GLib idle callback. Start
this._client.enrollDevice() using .then(...).catch(...) instead of
await, and return GLib.SOURCE_REMOVE synchronously after dispatching one
device. Keep queue-state updates and scheduling of the next device in
the Promise completion handler. This guarantees one dispatch per idle
source and prevents re-entry while authorization is pending.

This compatibility fix was validated with the dock -> monitor -> NVMe
chain: all devices authorized normally and the GNOME Shell busy loop did
not occur.

Assisted-By: gpt-5.6-terra

** Patch added: "tb-authrobot-sync-idle.patch"
   
https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/2084015/+attachment/5996054/+files/tb-authrobot-sync-idle.patch

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2084015

Title:
  gnome-shell has no response when plug-in unauthorized thunderbolt
  devices

To manage notifications about this bug go to:
https://bugs.launchpad.net/oem-priority/+bug/2084015/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to