Package: libpulse0 Version: 16.1+dfsg1-2+b1 Severity: normal Tags: patch fixed-upstream
(This will appear to be a pipewire bug, but in the end it looks like the problem is pulseaudio not closing file handles. I therefor file this bug to libpulse0 which I believe (no developer here) is used by the clients using pulseaudio.) After my notebook is running quite a few days (suspended during nights, used during days) having running multiple instances of firefox and thunderbird and listening to music using the shortwave flatpak the sound stops working. Shortwave shows a red 'prohibited' sign where usually would be the play button, pa-play can't play any sound anymore, pactl throws an error: ``` someuser@pureos:~$ pactl list Connection failure: Connection terminated ``` Using `pw-play` or `aplay` I can still play audio files. When looking at the open files I found that there are a few thousand memfd filehandles open: ``` # lsof | grep pulse | grep -v '/lib/\|/share/' | cut -c1-10,107- | sort | uniq -c | sort -n lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete. lsof: WARNING: can't stat() fuse.portal file system /run/user/1000/doc Output information may be incomplete. 1 systemd /run/user/1000/pulse/native type=STREAM (LISTEN) 2 pipewire- /run/user/1000/pulse/native type=STREAM (LISTEN) 3 callaudio /memfd:pulseaudio 3 callaudio /memfd:pulseaudio (deleted) 7 firefox /memfd:pulseaudio (deleted) 10 gsd-media /memfd:pulseaudio 10 gsd-media /memfd:pulseaudio (deleted) 27 nheko /memfd:pulseaudio 27 nheko /memfd:pulseaudio (deleted) 128 pipewire- /run/user/1000/pulse/native type=STREAM (CONNECTED) 176 thunderbi /memfd:pulseaudio 184 flatpak-s /memfd:pulseaudio (deleted) 288 virt-mana /memfd:pulseaudio (deleted) 874 firefox-b /memfd:pulseaudio 940 NitrokeyA /memfd:pulseaudio (deleted) 2274 firefox-b /memfd:pulseaudio (deleted) 2378 gnome-she /memfd:pulseaudio 2378 gnome-she /memfd:pulseaudio (deleted) 9680 thunderbi /memfd:pulseaudio (deleted) ``` Sometimes it helps to stop thunderbird and firefox, restart pipewire-pulse.socket pipewire-pulse and then try again playing sound using e.g. `paplay`. Other times I have to log out and in again to get rid of the rest of the open files. I configured pipewire-pulse to not offer unix:native for connections, but instead only tcp and made programs use that connection by configuring pulseaudios client.conf to disable shm and memfd and set a default-server. This stopped the problem from occuring and no memfd entries got accumulated, but let to other problems (volume control, general integration into gnome). I found the following issues that might be related to the problem: https://gitlab.freedesktop.org/pulseaudio/pulseaudio/-/issues/1394 https://gitlab.freedesktop.org/pipewire/pipewire/-/issues/3406 The changes following the pulseaudio issue do not seem to be integrated into the bookworm package, yet. To test whether they might help I compiled built the packages I have installed for pulseaudio (libpulse-mainloop-glib0:amd64, libpulse0:amd64, libpulsedsp:amd64, pulseaudio, pulseaudio-utils) with the following patch applied to find out whether this would help: ``` diff -r pulseaudio-orig/pulseaudio-16.1+dfsg1/src/pulsecore/memfd-wrappers.h pulseaudio-patched/pulseaudio-16.1+dfsg1/src/pulsecore/memfd-wrappers.h 68a69,72
#ifndef MFD_NOEXEC_SEAL #define MFD_NOEXEC_SEAL 0x0008U #endif
diff -r pulseaudio-orig/pulseaudio-16.1+dfsg1/src/pulsecore/shm.c pulseaudio-patched/pulseaudio-16.1+dfsg1/src/pulsecore/shm.c 167c167 < fd = memfd_create("pulseaudio", MFD_ALLOW_SEALING); ---
fd = memfd_create("pulseaudio", MFD_ALLOW_SEALING|MFD_CLOEXEC);
``` After half a day of use I found that at least the number of open memfds increases and once in while decreases again. I'll have to wait for a longer period of time to find out whether the situation really improved.