Open samer-- opened 5 days ago
This looks like MPD is using io_uring for file I/O, which is good; but there is a problem, because the read of the APE signature never finishes. From here, I cannot tell why that happens, because in the 4 years since io_uring support was added to MPD, this problem has never occurred.
If you want to debug this, the relevant functions are UringInputStream::SubmitRead()
which sends read requests to io_uring and when it finishes, UringInputStream::OnRead()
or UringInputStream::OnReadError()
is invoked.
Hi Max, thanks for your reply - I'll have a look into this.
Maybe you encountered a race that may have been fixed by commit b050e0132ed3a207f86545773eaecb8ff11c1b2b (though extremely unlikely that this race was reproducible). But it would be interesting to see if git master still has this problem for you.
I'll try this when I have some time (compilation cycle very slow on Sheevaplug!). In the meantime, thanks to your pointing to io_uring
, I was able to get my MPD working by disabling io_uring
with -Dio_uring=disabled
in the configuration phase.
Bug report
Describe the bug
Since upgrading Sheevaplug to Debian Bullseye, MPD update thread hangs on startup. The music library contains only playlists. No music tracks are visible. Only the first directory appears in the music directory tree is visible, but is unpopulated.
Music files are fine, readble, and playable with other tools (mplayer, mpv etc). Music files are owned by
root
, in groupaudio
and world readable. The first music filename appears in the log - see further diagnosis below.After hang, MPD can only be killed with
kill -9
Expected Behavior
Music library is populated with my music.
Actual Behavior
No tracks are added to music library.
Version
I tried this with the vanilla Debian mpd package in bullseye, then bookworm, then Trixie, all with the same result. I got the Debian source package and rebuilt it with debug symbols and many plugins disabled.
Configuration
Log
Running with
gdb
reveals hang on a mutex/lock/condition variableNB. program unresponsive to Ctrl-C at this point. Ctrl-Z returns control to gdb.
NB. Line 200 of
AsyncInputStream.cxx
is