strawberrymusicplayer / strawberry

:strawberry: Strawberry Music Player
https://www.strawberrymusicplayer.org/
GNU General Public License v3.0
2.67k stars 183 forks source link

Slow collection search #1482

Closed ronjouch closed 2 months ago

ronjouch commented 2 months ago

Describe the bug

In 1.1.0-rc, the top-left library search bar

  1. is extremely slow (feels synchronous, hangs the UI)
  2. sometimes segfaults Strawberry

To Reproduce

Type stuff in the library search bar

Expected behavior

Results used to be snappy and not cause crashes

Screenshots:

N/A

System Information:

ronjouch commented 2 months ago

Logs below. I dunno if the GStreamer errors have anything to do with the segfault (see last line), or are just a side-effect of the searchbar crash.

10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.134 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.135 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.136 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.137 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.153 ERROR logging:84(GStreamer)            gst_mini_object_unref: assertion 'GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) > 0' failed
10:57:10.153 ERROR logging:84(GStreamer)            gst_buffer_map_range: assertion 'GST_IS_BUFFER (buffer)' failed
10:57:10.153 ERROR logging:84(GStreamer)            gst_buffer_extract: assertion 'GST_IS_BUFFER (buffer)' failed
10:57:10.153 ERROR logging:84(GStreamer)            gst_buffer_unmap: assertion 'GST_IS_BUFFER (buffer)' failed
10:57:10.153 ERROR logging:84(GStreamer)            gst_buffer_get_size: assertion 'GST_IS_BUFFER (buffer)' failed
10:57:10.153 ERROR logging:84(GStreamer)            gst_buffer_resize_range: assertion 'gst_buffer_is_writable (buffer)' failed
10:57:10.153 ERROR logging:84(GStreamer)            gst_buffer_copy_into: assertion 'gst_buffer_is_writable (dest)' failed
fish: Job 1, 'strawberry' terminated by signal SIGSEGV (Address boundary error)
jonaski commented 2 months ago

I can't reproduce this. How many songs are in the collection? Is this with Qt 5 or Qt 6?

Can you do a gdb backtrace of the crash? https://wiki.strawberrymusicplayer.org/wiki/Backtrace

ronjouch commented 2 months ago

@jonaski

How many songs are in the collection?

31000 songs

Is this with Qt 5 or Qt 6?

I'm using your official strawberry_1.1.0-rc2-bookworm_amd64.deb, sporting Qt 6.4.2 if I believe the About Qt box.

Can you do a gdb backtrace of the crash?

Will do.

ronjouch commented 2 months ago

@jonaski extra note as I just restarted Strawberry: it's not just the library search that is slow. Even initial listview population happens slowly, taking seconds whereas it used to be instant

guprobr commented 2 months ago

I'm sorry to ask, but could you verify with uptime, and htop ? What processes indicate high load average, cpu or memory?

Enable thread view on htop if possible, it would help debug strawberry too

guprobr commented 2 months ago

also please verify dmesg kernel ring buffer and syslogd this could be a severe filesystem damage that just an fsck with unmounted fs would quickly solve or even a hardware issue

thats why I think its good to verify the O.S. for error msgs too, sry for the extra paranoia here LoL

ronjouch commented 2 months ago

@guprobr

I'm sorry to ask, but could you verify with uptime, and htop ? What processes indicate high load average, cpu or memory?

No abnormal load, system is idle (except when I type my library search query, which 100% pegs a CPU)

also please verify dmesg kernel ring buffer and syslogd this could be a severe filesystem damage that just an fsck with unmounted fs would quickly solve or even a hardware issue

Nothing special in dmesg & journalctl, and problem disappears if I revert to 1.0.23. This is a 1.1 regresssion.

guprobr commented 2 months ago

got it. Just to check. I got worried if it was any damage to FS or hardware, gdb and 30k library would certainly make your life even worse :P

Strange, I cannot reproduce too. I have about 12k songs.

What if you make a backup copy of your ~/.config/strawberry/strawberry.conf and reset everything?

Also it would be good to check the sqlite, in the wiki I believe there are instructions. But make a bkp before wiping out anything.

guprobr commented 2 months ago

I have a tip here, close the app, bkp copy the config and try removing these lines:

column_alignment and states

then open the app again

see if it helps

jonaski commented 2 months ago

It will take a few seconds to load the collection in the new version, that's expected. I have about 24600 songs, so not as many songs as you, I notice slow search performance with Qt 5.15.14, but with Qt 6.7 it's acceptable, but still using lot of CPU, I think it needs some optimization, but I'm more interested in the crash as I can't reproduce that.

guprobr commented 2 months ago

pretty exponential, me with my 12k feels nothing wrong at all

ronjouch commented 2 months ago

Crash backtrace below.

Feels like this may be something specific to my system that can be ignored. I'm running Debian Bookworm with Pipewire backports, now at version 1.2.0-1~bpo12+1 (stable is at 0.3.65-3+deb12u1). It usually behaves well, but hey, given the backtrace, maybe something gstreamer/pipewire is off.

But maybe you can manage to repro it: I think I'm noticing I can repro the crash only if I pick the new backend Send audio/video to PipeWire. I repro it easily with this backend, and have been unable to repro with the Wrapper audio sink for automatically detected audio sink. Can you try to repro with the new PW backend?

With that, maybe I should rename this to just the crash, close it (since you cannot repro), and open another issue regarding performance slowdown. 👍👎?

Thread 34 "task7" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fff924006c0 (LWP 158920)]
0x00007fffe99488d0 in ?? () from /lib/x86_64-linux-gnu/gstreamer-1.0/libgstpipewire.so

(gdb) bt
#0  0x00007fffe99488d0 in ?? () from /lib/x86_64-linux-gnu/gstreamer-1.0/libgstpipewire.so
#1  0x00007ffff5a787fc in ?? () from /lib/x86_64-linux-gnu/libgstbase-1.0.so.0
#2  0x00007ffff5a7a46e in ?? () from /lib/x86_64-linux-gnu/libgstbase-1.0.so.0
#3  0x00007ffff55592a9 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#4  0x00007ffff555b7b1 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#5  0x00007ffff5562b6b in gst_pad_push () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#6  0x00007ffff5a84ce0 in ?? () from /lib/x86_64-linux-gnu/libgstbase-1.0.so.0
#7  0x00007ffff55592a9 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#8  0x00007ffff555b7b1 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#9  0x00007ffff5562b6b in gst_pad_push () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#10 0x00007ffff5a84ce0 in ?? () from /lib/x86_64-linux-gnu/libgstbase-1.0.so.0
#11 0x00007ffff55592a9 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#12 0x00007ffff555b7b1 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#13 0x00007ffff5562b6b in gst_pad_push () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#14 0x00007ffff5a84ce0 in ?? () from /lib/x86_64-linux-gnu/libgstbase-1.0.so.0
#15 0x00007ffff55592a9 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#16 0x00007ffff555b7b1 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#17 0x00007ffff5562b6b in gst_pad_push () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#18 0x00007ffff5a84ce0 in ?? () from /lib/x86_64-linux-gnu/libgstbase-1.0.so.0
#19 0x00007ffff55592a9 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#20 0x00007ffff555b7b1 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#21 0x00007ffff5562b6b in gst_pad_push () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#22 0x00007fffe97e6dff in ?? () from /lib/x86_64-linux-gnu/gstreamer-1.0/libgstcoreelements.so
#23 0x00007ffff5592441 in ?? () from /lib/x86_64-linux-gnu/libgstreamer-1.0.so.0
#24 0x00007ffff53956ca in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#25 0x00007ffff5394cfd in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#26 0x00007ffff4dc9134 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442
#27 0x00007ffff4e497dc in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81
guprobr commented 2 months ago
~/strawberry/build$ pipewire --version
pipewire
Compiled with libpipewire 1.2.0
Linked with libpipewire 1.2.0

I'm used to compile from git, so its kinda latest pipewire

no crash here

ronjouch commented 2 months ago

I'm used to compile from git, so its kinda latest pipewire. No crash here

Okay cool. However, my low-informed mumbling above was that I'm not on a vanilla Debian, and although the pipewire backports are usually okay, I wouldn't be surprised the culprit is in this backported libgstpipewire in-between wrapper who might have less than 100 users in the world as of now.

guprobr commented 2 months ago

Lol exactly

what about gstreamer itself? Which version? Here I compiled from git recently too

ronjouch commented 2 months ago

1.2.0 too, provided by backports:

$ apt-cache show gstreamer1.0-pipewire
Package: gstreamer1.0-pipewire
Source: pipewire
Version: 1.2.0-1~bpo12+1
Installed-Size: 256
Maintainer: Utopia Maintenance Team <pkg-utopia-maintainers@alioth-lists.debian.net>
Architecture: amd64
Depends: pipewire (= 1.2.0-1~bpo12+1), libc6 (>= 2.28), libglib2.0-0 (>= 2.37.3), libgstreamer-plugins-base1.0-0 (>= 1.6.0), libgstreamer1.0-0 (>= 1.16.0), libpipewire-0.3-0 (= 1.2.0-1~bpo12+1)
guprobr commented 2 months ago

GST_DEBUG -> have u tried activating this variable? maybe we can get more info. https://gstreamer.freedesktop.org/documentation/tutorials/basic/debugging-tools.html?gi-language=c

I doubt the strawberry sources are not releasing any object, otherwise the bug would happen for everybody. The logs you provided indicate that something is not properly managed internally in gstreamer, the mini-objects Its trying to release something empty I assume.

In time: Whats the value of your buffer in the settings of strawberry? default = 4000

guprobr commented 2 months ago

Actually, it is plausible that a race condition due to high overhead in the search functionality could be causing issues with GStreamer object and buffer management. To reduce the frequency of search operations, we could try a debounce mechanism so that the function gets called less times, with a Timer, dunno actually how to do it. To inspect the lifetime and thread safety of gst objects in the code I believe would be a pretty hard work and those things are robust already in the code. The main difference we could determine here between the different test scenarios, is the large size of the library. This gives a clue about overhead and race condition. It would not hurt to try slowing down the horse of search, maybe temporarily, to debug further the crash. The crash is being triggered by something else; gStreamer crashing might be a consequence of other stuff, like the race condition. Search will be slower but maybe it will prevent crashing. At least we would get more information.

jonaski commented 2 months ago

if you want to look at it, the code is here: https://github.com/strawberrymusicplayer/strawberry/blob/master/src/collection/collectionfilter.cpp

I'd like to try every possible solution, bringing back SQL/FTS search should be the last resort.

jonaski commented 2 months ago

I used the performance analyzer in Qt Creator, and it looks like the culprit is QRegularExpression, removing that part of the code makes the search very fast.

guprobr commented 2 months ago

REgexp can be monsters depending on the expression! complex patterns can really overkill and be inneficient

Way to gooooo :D nice that you found the REal McCoy

there are ways of compiling regular expressions and reuse-it. Maybe instead of doing it every function call, "cache" it

operatorRegex = QRegularExpression(QStringLiteral("(=|<[>=]?|>=?|!=)"));
        operatorRegex.optimize();

the best would be not even have to use it.... if not optimized those beasts make incredible damage to performance

Careful with the *

jonaski commented 2 months ago

8327751b918e950611b8f9cccd2d8303bb29f08a works for me. The crash seems unrelated to this, or could be indirectly related because the search is blocking the main thread.

AllKind commented 2 months ago

I just installed strawberry 1.1.0-rc3 and did minimal testing. I have around 65.000 songs. QT version is 6.2.4. The DB is on a M.2 SSD which has about 4000MB/s read spead.

Initial loading of the collection takes about 6-7 seconds. Which is fine by me. But search is horribly slow and always freezes the program (playlist window - seek bar).

If I type "title:" into the search area I have to wait about 30 seconds until the text appears and as said everything is frozen at that time span. Then I type the search word, which takes about 5 to 6 seconds until the text appears and the results are displayed. Again with the rest of the gui frozen.

It would be nice if strawberry would wait until the search text/pattern is completed before starting the search. Maybe wait like a second for further input before searching, or until the user hits "Enter". Or so...

Regex search is possible (now)? Would be helpful in many situations, but if that's the thing causing the drag, better throw it out ;-)

System: Kernel: 5.15.162-custom x86_64 bits: 64 compiler: gcc v: 11.4.0 Desktop: Cinnamon 6.0.4 tk: GTK 3.24.33 wm: muffin vt: 7 dm: LightDM 1.30.0 Distro: Linux Mint 21.3 Virginia base: Ubuntu 22.04 jammy Machine: Type: Desktop System: Gigabyte product: TRX40 DESIGNARE v: -CF serial: Mobo: Gigabyte model: TRX40 DESIGNARE serial: UEFI: American Megatrends LLC. v: F6 date: 09/07/2022 CPU: Info: 24-core model: AMD Ryzen Threadripper 3960X bits: 64 type: MT MCP smt: enabled arch: Zen 2 rev: 0 cache: L1: 1.5 MiB L2: 12 MiB L3: 128 MiB Speed (MHz): avg: 2195 high: 2206 min/max: 2200/3800 boost: enabled cores: 1: 2206 2: 2193 3: 2197 4: 2194 5: 2195 6: 2196 7: 2196 8: 2195 9: 2194 10: 2196 11: 2195 12: 2201 13: 2196 14: 2195 15: 2196 16: 2196 17: 2192 18: 2198 19: 2196 20: 2194 21: 2193 22: 2191 23: 2206 24: 2196 25: 2195 26: 2195 27: 2196 28: 2194 29: 2194 30: 2196 31: 2190 32: 2194 33: 2188 34: 2196 35: 2196 36: 2196 37: 2196 38: 2195 39: 2194 40: 2196 41: 2191 42: 2192 43: 2194 44: 2193 45: 2191 46: 2192 47: 2196 48: 2196 bogomips: 364117 Flags: avx avx2 ht lm nx pae sse sse2 sse3 sse4_1 sse4_2 sse4a ssse3 svm

guprobr commented 2 months ago

Regex search is possible (now)? Would be helpful in many situations, but if that's the thing causing the drag, better throw it out ;-)

YEP, yes indeed!!!!!! hahahahaa

yes too bad we could not reproduce teh crash...

LoL you killed all asterisks nice @jonaski

Its an exponential overhead causing a race condition. Thats it. I believe it will fix. Tks guys for the info; lets hope I'm right about the fix Jonas just made

ronjouch commented 2 months ago

8327751 works for me. The crash seems unrelated to this, or could be indirectly related because the search is blocking the main thread.

@jonaski thx! Will re-test as soon as I see a build with it.

ronjouch commented 2 months ago

Fix confirmed with freshly-published 1.1.0-rc4 official debian-bookworm build! ThaaaaAAAAaaaaaaaaaaanks everybody <3 !