An existing *-runtime.tmp link blocks server startup
Submitted by Kai Ruhnau
Assigned to pul..@..op.org
This is for v10.0, but the problematic code hasn't changed since.
I got myself into the following SD Card state on my embedded device (probably through power cycling at the wrong moment):
$ ls -lah ~/.config/pulse ... a811db6950f84a578b3674d9456012e8-card-database.arm-target-linux-gnueabi.simple ... a811db6950f84a578b3674d9456012e8-default-sink ... a811db6950f84a578b3674d9456012e8-default-source ... a811db6950f84a578b3674d9456012e8-device-volumes.arm-target-linux-gnueabi.simple ... a811db6950f84a578b3674d9456012e8-runtime -> /tmp/pulse-bbkhoaNGbVPN ... a811db6950f84a578b3674d9456012e8-runtime.tmp -> /tmp/pulse-bbkhoaNGbVPN ... a811db6950f84a578b3674d9456012e8-stream-volumes.arm-target-linux-gnueabi.simple ... cookie
Note that there is an additional *-runtime.tmp folder present. Both runtime links point to a folder that doesn't exist anymore—it was on a tmpfs.
In this setup, the PulseAudio daemon doesn't start and hangs in pa_get_runtime_dir() from core-util.c, because it doesn't timeout on the error condition https://cgit.freedesktop.org/pulseaudio/pulseaudio/tree/src/pulsecore/core-util.c?h=v10.0#n1890 and continues to try again. The moment I delete the extra *-runtime.tmp file, the server successfully continues its startup.
On my device, I have a couple of options like moving the XDG_RUNTIME_DIR to a tmpfs (I don't need any persistence), but as it is now, this could be used for a DOS for a normal user.