quodlibet icon indicating copy to clipboard operation
quodlibet copied to clipboard

very reproducible crash when playing results of a complex query with shuffle on

Open deutrino opened this issue 1 year ago • 3 comments

Steps to reproduce

  1. Have songs in a bunch of playlists being abused as something similar to tag (e.g. fast, slow, acoustic, electric, 80s, 90s, etc)
  2. Create a complex query to build a song list based on playlist-as-tag membership, lastplayed, rating, etc.
  3. Listen to the results of said query
  4. 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)

deutrino avatar Jan 25 '25 03:01 deutrino

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.

deutrino avatar Jan 26 '25 03:01 deutrino

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.

deutrino avatar Jan 26 '25 03:01 deutrino

Hi, I'm also affected by this bug, every two play, my quodlibet version is 4.6.0.

dhmoclex avatar Apr 12 '25 13:04 dhmoclex