very reproducible crash when playing results of a complex query with shuffle on
Steps to reproduce
- Have songs in a bunch of playlists being abused as something similar to tag (e.g. fast, slow, acoustic, electric, 80s, 90s, etc)
- Create a complex query to build a song list based on playlist-as-tag membership, lastplayed, rating, etc.
- Listen to the results of said query
- Enable shuffle
Expected Output
The song list should play normally.
Actual Output
Quod Libet will very reliably crash within a few songs.
Test System
Which version of Quod Libet?
4.6.0 Flatpak, and versions prior. This has actually decimated my ability to use QL for about 18 months, and I haven't had the mental bandwidth to follow up on making an issue.
Which operating system
Debian 12 (BunsenLabs remix, so Openbox desktop)
If it's audio-related, what back-end?
?
Additional Information
A segfault is reported before Quod Libet crashes, as in minutes before. I have no idea if it's relevant to the actual crash.
$ flatpak run io.github.quodlibet.QuodLibet
E: [0001.743] errorreport.main.errorhook:
faulthandling.py:138:raise_and_clear_error: quodlibet.errorreport.faulthandling.FaultHandlerCrash: Fatal Python error: Segmentation fault
Stack (most recent call first):
File "/app/lib/python3.11/site-packages/quodlibet/order/__init__.py", line 136 in get_index
File "/app/lib/python3.11/site-packages/quodlibet/order/__init__.py", line 138 in remaining
File "/app/lib/python3.11/site-packages/quodlibet/order/reorder.py", line 44 in next
File "/app/lib/python3.11/site-packages/quodlibet/order/__init__.py", line 72 in next_implicit
File "/app/lib/python3.11/site-packages/quodlibet/qltk/songmodel.py", line 267 in next_ended
File "/app/lib/python3.11/site-packages/quodlibet/qltk/songmodel.py", line 90 in next_ended
File "/app/lib/python3.11/site-packages/quodlibet/player/gstbe/player.py", line 732 in __about_to_finish_sync
File "/app/lib/python3.11/site-packages/quodlibet/util/__init__.py", line 1007 in _run
File "/app/lib/python3.11/site-packages/quodlibet/util/__init__.py", line 1020 in _idle_run
File "/usr/lib/python3.11/site-packages/gi/overrides/Gtk.py", line 1694 in main
File "/app/lib/python3.11/site-packages/quodlibet/_main.py", line 385 in run
File "/app/lib/python3.11/site-packages/quodlibet/main.py", line 201 in main
File "/app/bin/quodlibet", line 14 in <module>
Extension modules: gi._gi, cairo._cairo, gi._gi_cairo, _dbus_bindings, _dbus_glib_bindings (total: 5)
I used flatpak run -- io.github.quodlibet.QuodLibet --debug to get debug output, but that didn't seem to output much useful.
D: [0460.299] QLSubmitQueue.send_nowplaying: Now playing song: Morphine - All Wrong
D: [0460.302] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/570 POPPY.xspf'
D: [0460.337] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/indie.xspf'
D: [0460.350] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/552 sad.xspf'
D: [0460.369] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/05 SUMMER.xspf'
D: [0460.390] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/363 male vocal.xspf'
D: [0460.405] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/03 dancefloor turnover.xspf'
D: [0460.411] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/350 STORY-DRIVEN.xspf'
D: [0460.420] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/04 nocturnal.xspf'
D: [0460.430] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/03 lounge actif.xspf'
D: [0460.447] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/221 SLOW.xspf'
D: [0460.447] QLSubmitQueue._check_submit: Submission status: OK
D: [0460.520] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/00 HOME TUNES.xspf'
D: [0460.579] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/brass section.xspf'
D: [0460.611] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/700 DRUMSBASSGUITAR.xspf'
D: [0460.709] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/552 ANGSTY.xspf'
D: [0460.743] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/186 the 90s kid.xspf'
D: [0460.758] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/04 dusk.xspf'
D: [0460.785] XSPFBackedPlaylist.write: Writing "/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/025 bumpin' party.xspf"
D: [0460.798] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/17 sweet boys.xspf'
D: [0460.839] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/441 electric.xspf'
D: [0460.873] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/03 DANCEABLE.xspf'
D: [0460.903] XSPFBackedPlaylist.write: Writing '/home/deutrino/.var/app/io.github.quodlibet.QuodLibet/config/quodlibet/playlists/187 the aughts kid.xspf'
D: [0460.915] PlaylistLibrary.changed('PlaylistLibrary for main'): Changing 28 items directly.
D: [0460.915] PlaylistLibrary._changed('PlaylistLibrary for main'): Emitting changed for 28 item(s) (e.g. '350 STORY-DRIVEN'...)
D: [0481.217] PlayQueue._write: Saving play queue after 120.0s
D: [0601.220] PlayQueue._write: Saving play queue after 120.0s
D: [0601.448] config.save: Writing config...
D: [0601.454] library.save: Saving all libraries...
D: [0679.684] player.gstbe.player.__about_to_finish: About to finish (async)
D: [0679.684] player.gstbe.player.__about_to_finish_sync: About to finish (sync)
D: [0679.685] player.gstbe.player.__about_to_finish_sync: Select next song in mainloop..
D: [0679.685] PlaylistModel.next_ended: Using <Prefer higher rated>.next_implicit() to get next song
And then the program just quit.
Possible duplicate of #4373, except for me it doesn't always crash after exactly 2 plays.
I took particular note of this comment: https://github.com/quodlibet/quodlibet/issues/4373#issuecomment-1732379286
Because my complex query does indeed include a (lastplayed > ___) component.
Hi, I'm also affected by this bug, every two play, my quodlibet version is 4.6.0.