[PR #436] [CLOSED] fix(lobbies): stop gamepad input leaking into Wolf-UI across lobby switches #466

Closed
opened 2026-10-15 13:00:47 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/games-on-whales/wolf/pull/436
Author: @JBailes
Created: 6/16/2026
Status: ❌ Closed

Base: stable ← Head: fix/joypad-input-leak


📝 Commits (1)

  • 920fea3 fix(lobbies): stop gamepad input leaking into Wolf-UI across lobby switches

📊 Changes

1 file changed (+66 additions, -32 deletions)

View changed files

📝 src/moonlight-server/sessions/lobbies.cpp (+66 -32)

📄 Description

Fixes #435.

Problem

When a session joins or leaves a lobby we hand its joypad to the new container by mknod-ing the device node and faking udev events, and rm the node from the old one on unplug. A process that already opened the node (the Wolf-UI Godot process) keeps its fd valid after the rm, so it carries on getting input. Gamepad input then drives both the running app and the Wolf-UI underneath it, which randomly launches and closes apps.

This isn't Unraid specific, the mechanism is the same on plain Docker.

Change

Route every join/leave joypad hand-off through migrate_joypad(): unplug from the source, call inputtino::Joypad::recreate_device() to destroy and rebuild the underlying device (UI_DEV_DESTROY/UHID_DESTROY invalidates the stale fd in the old container), then plug the fresh device into the target. The joypad object and its callbacks survive, so Moonlight input and rumble keep working.

Needs games-on-whales/inputtino#39. Covers Xbox, Switch and PS/DualSense.

Testing

Built against the inputtino branch via -DWOLF_CUSTOM_INPUTTINO_SRC. Please hammer pause/resume, that's the path most likely to regress.


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/games-on-whales/wolf/pull/436 **Author:** [@JBailes](https://github.com/JBailes) **Created:** 6/16/2026 **Status:** ❌ Closed **Base:** `stable` ← **Head:** `fix/joypad-input-leak` --- ### 📝 Commits (1) - [`920fea3`](https://github.com/games-on-whales/wolf/commit/920fea3a559cfd24266f50bab8ae5884994aa6b3) fix(lobbies): stop gamepad input leaking into Wolf-UI across lobby switches ### 📊 Changes **1 file changed** (+66 additions, -32 deletions) <details> <summary>View changed files</summary> 📝 `src/moonlight-server/sessions/lobbies.cpp` (+66 -32) </details> ### 📄 Description Fixes #435. ## Problem When a session joins or leaves a lobby we hand its joypad to the new container by mknod-ing the device node and faking udev events, and rm the node from the old one on unplug. A process that already opened the node (the Wolf-UI Godot process) keeps its fd valid after the rm, so it carries on getting input. Gamepad input then drives both the running app and the Wolf-UI underneath it, which randomly launches and closes apps. This isn't Unraid specific, the mechanism is the same on plain Docker. ## Change Route every join/leave joypad hand-off through `migrate_joypad()`: unplug from the source, call `inputtino::Joypad::recreate_device()` to destroy and rebuild the underlying device (UI_DEV_DESTROY/UHID_DESTROY invalidates the stale fd in the old container), then plug the fresh device into the target. The joypad object and its callbacks survive, so Moonlight input and rumble keep working. Needs games-on-whales/inputtino#39. Covers Xbox, Switch and PS/DualSense. ## Testing Built against the inputtino branch via `-DWOLF_CUSTOM_INPUTTINO_SRC`. Please hammer pause/resume, that's the path most likely to regress. --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-15 13:00:47 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
games-on-whales/wolf#466
No description provided.