We need to show the fix is either Fix Committed or Released for Questing
here before proceeding with SRUs on other releases. It's something we
ensure ourselves because otherwise the SRU team would reject it for the
same reason.

Also I think it will be 1.21, not 1.22.

-- 
You received this bug notification because you are a member of Desktop
Packages, which is subscribed to xdg-desktop-portal in Ubuntu.
https://bugs.launchpad.net/bugs/2107340

Title:
  [SRU] Pipewire fails to reacquire a realtime priority when restarted

Status in pipewire package in Ubuntu:
  Triaged
Status in xdg-desktop-portal package in Ubuntu:
  Confirmed
Status in pipewire source package in Plucky:
  Confirmed
Status in xdg-desktop-portal source package in Plucky:
  Confirmed
Status in pipewire source package in Questing:
  Triaged
Status in xdg-desktop-portal source package in Questing:
  Confirmed

Bug description:
  [ Impact ]
  Restarting the pipewire user daemon causes it to lose realtime privileges, 
potentially resulting in hard-to-diagnose choppy audio. (xruns)

  [ Test plan ] 
  1. Fresh boot machine
  2. See expected realtime parameters
  ps -e -o pri,ni,comm | grep wire
   30 -11 pipewire
   19 0 pipewire
   30 -11 wireplumber
   30 -11 pipewire-pulse
  3. Restart the services
   systemctl --user restart pipewire wireplumber pipewire-pulse
  4. Ensure the realtime parameters are unchanged from before the restart,
  ps -e -o pri,ni,comm | grep wire
   30 -11 pipewire
   19 0 pipewire
   30 -11 wireplumber
   30 -11 pipewire-pulse

  [ Where problems could occur ]

  The new method of getting pid namespaces from pidfd's could itself be
  buggy in some unknown way. In the absolute worst case, this would
  imply no sandboxed apps could request setting threads to realtime
  (org.freedesktop.portal.Realtime) or access the GameMode API
  (org.freedesktop.portal.GameMode).

  [ Other Info ]
  This bug was only reproducible on specific versions of the kernel. The 
combination of this portal brittleness and the kernel currently shipped with 
Plucky is triggering it.

  Backporting both commit dd08d451e3019f4ec6285ecb14d4c746b6e1d420 and
  dd08d451e3019f4ec6285ecb14d4c746b6e1d420 has a very low regression
  potential. The first change is purely refactoring commit, which
  enhances code clarity by renaming functions and variables to better
  differentiate between pidfds and /proc/$PID directory file descriptors
  without altering any underlying logic or behavior.
  dd08d451e3019f4ec6285ecb14d4c746b6e1d420 fixes a specific bug where a
  function was incorrectly called with a pidfd instead of a /proc/$PID
  directory file descriptor, introducing a new, correct pidfd-aware
  function. The PIDFD_GET_PID_NAMESPACE ioctl is a standard Linux kernel
  interface for interacting with PID file descriptors. Its usage here is
  straightforward and unlikely to cause unexpected side effects if the
  underlying kernel support is present
  (https://lwn.net/Articles/992740/).

  See the xdg-desktop-portal package rebuild here:
  https://launchpad.net/~charles05/+archive/ubuntu/ppa/+packages

  Upstream discussion: https://github.com/flatpak/xdg-desktop-
  portal/pull/1713

  [ Original report ]
  Pipewire tries to acquire a realtime priority when it starts via the 
libpipewire-module-rt plugin. By default, it prefers to use the 
org.freedesktop.portal.Realtime interface if xdg-desktop-portal is running (it 
checks if org.freedesktop.portal.Desktop exists on the session bus). If 
xdg-desktop-portal isn't running, it uses rtkit directly - see 
https://gitlab.freedesktop.org/pipewire/pipewire/-/tree/1.2.7/src/modules?ref_type=tags#L932.

  I started looking at this because I have an annoying issue with my
  audio which results in my speakers making popping noises frequently
  when they're outputting anything. I have another issue where my USB
  speakers are frequently not detected by pipewire without restarting
  it.

  When pipewire starts with a new session, it acquires a realtime
  priority by using rtkit directly because xdg-desktop-portal isn't
  running at this stage. However, if you restart pipewire manually later
  on when xdg-desktop-portal is running, pipewire uses the portal
  interface to request a realtime priority, and this fails with xdg-
  desktop-portal outputting the following error to the journal:

  Apr 13 02:58:01 farnsworth xdg-desktop-por[7283]: Realtime error:
  Could not get pidns: Could not fstatat ns/pid: Not a directory

  The libpipewire-module-rt plugin does have an option to disable usage
  of the portal interface for requesting a realtime priority
  (rtportal.enabled=false).

  This is tested with pipewire 1.2.7 in plucky.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/pipewire/+bug/2107340/+subscriptions


-- 
Mailing list: https://launchpad.net/~desktop-packages
Post to     : desktop-packages@lists.launchpad.net
Unsubscribe : https://launchpad.net/~desktop-packages
More help   : https://help.launchpad.net/ListHelp

Reply via email to