libsoup occasionally crashes when run on thread
This is a issue first raised on Gnome Discourse, but is continued here by recommendation by @mcatanzaro.
For a project of mine, I have implemented a media downloader using libsoup, which is called in threads using GLib.Task
.
This media downloader occasionally crashes, either with an error about the body InputStream
or with an segfault, and I have yet found a reason on why this could be.
The relevant classes in my code are MediaLoader (base class implementing the download), ImageLoader (managing the task and creating a Gdk.Texture) and MediaDisplayItem as an example for a UI class initiating a download.
Here is the backtrace I have created with flatpak-coredumpctl
for the segfaulting:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `cawbird'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 0x00007fa137101752 in hd_ringbuf_free () from /usr/lib/x86_64-linux-gnu/libnghttp2.so.14
--Type <RET> for more, q to quit, c to continue without paging--
[Current thread is 1 (Thread 0x7fa136aa9300 (LWP 2))]
(gdb) bt full
#0 0x00007fa137101752 in hd_ringbuf_free () at /usr/lib/x86_64-linux-gnu/libnghttp2.so.14
#1 0x00007fa1370f5bd4 in nghttp2_session_del () at /usr/lib/x86_64-linux-gnu/libnghttp2.so.14
#2 0x00007fa137d696c1 in soup_client_message_io_http2_destroy () at /usr/lib/x86_64-linux-gnu/libsoup-3.0.so.0
#3 0x00007fa137d8027e in soup_connection_finalize () at /usr/lib/x86_64-linux-gnu/libsoup-3.0.so.0
#4 0x00007fa138ab2cc4 in g_object_unref () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#5 0x00007fa138bb7f77 in g_task_finalize () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#6 0x00007fa138ab2cc4 in g_object_unref () at /usr/lib/x86_64-linux-gnu/libgobject-2.0.so.0
#7 0x00007fa1389afabc in g_source_callback_unref () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#8 0x00007fa1389b005f in g_source_destroy_internal () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#9 0x00007fa1389b3c78 in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#10 0x00007fa1389b4048 in g_main_context_iterate.constprop () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#11 0x00007fa1389b4114 in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#12 0x00007fa138be9bed in g_application_run () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#13 0x0000555b73fc9cfb in cawbird_main (args=0x7fff9ec35fb8, args_length1=1)
at ../../../../../../../../../Programming/Projekte/NewCaw/src/Cawbird.vala:51
_tmp0_ = 0x555b748dd110
_tmp1_ = 0x555b748dd110
_tmp2_ = 0
result = 0
#14 0x0000555b73fc9d44 in main (argc=1, argv=0x7fff9ec35fb8)
at ../../../../../../../../../Programming/Projekte/NewCaw/src/Cawbird.vala:43
And here is the error and backtrace for the issue with istream:
**
libsoup-http2:ERROR:../libsoup/http2/soup-client-message-io-http2.c:734:on_data_chunk_recv_callback: assertion failed: (msgdata->body_istream != NULL)
Bail out! libsoup-http2:ERROR:../libsoup/http2/soup-client-message-io-http2.c:734:on_data_chunk_recv_callback: assertion failed: (msgdata->body_istream != NULL)
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/x86_64-linux-gnu/libthread_db.so.1".
Core was generated by `cawbird'.
Program terminated with signal SIGABRT, Aborted.
#0 0x00007f828e0ba4bb in raise () from /usr/lib/x86_64-linux-gnu/libc.so.6
[Current thread is 1 (Thread 0x7f828cd35300 (LWP 2))]
(gdb)
(gdb) bt full
#0 0x00007f828e0ba4bb in raise () at /usr/lib/x86_64-linux-gnu/libc.so.6
#1 0x00007f828e0a3867 in abort () at /usr/lib/x86_64-linux-gnu/libc.so.6
#2 0x00007f828ec07c7c in g_assertion_message_expr.cold () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3 0x00007f828ec6adb7 in g_assertion_message_expr () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4 0x00007f828dff64ce in on_data_chunk_recv_callback () at /usr/lib/x86_64-linux-gnu/libsoup-3.0.so.0
#5 0x00007f828d388f91 in nghttp2_session_mem_recv () at /usr/lib/x86_64-linux-gnu/libnghttp2.so.14
#6 0x00007f828dff6589 in io_read () at /usr/lib/x86_64-linux-gnu/libsoup-3.0.so.0
#7 0x00007f828dff66bb in io_read_ready () at /usr/lib/x86_64-linux-gnu/libsoup-3.0.so.0
#8 0x00007f828ec3fb3b in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#9 0x00007f828ec40048 in g_main_context_iterate.constprop () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#10 0x00007f828ec40114 in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#11 0x00007f828ee75bed in g_application_run () at /usr/lib/x86_64-linux-gnu/libgio-2.0.so.0
#12 0x000055e290dcbcfb in cawbird_main (args=0x7ffc847c4ac8, args_length1=1)
at ../../../../../../../../../Programming/Projekte/NewCaw/src/Cawbird.vala:51
_tmp0_ = 0x55e291b81110
_tmp1_ = 0x55e291b81110
_tmp2_ = 0
result = 0
#13 0x000055e290dcbd44 in main (argc=1, argv=0x7ffc847c4ac8) at ../../../../../../../../../Programming/Projekte/NewCaw/src/Cawbird.vala:43