Assertion failure in async state change

i’m seeing this assertion failure from within gstreamer:

gst_base_src_set_format: assertion 'GST_STATE (src) <= GST_STATE_READY' failed

afaict this happens under the following condition:

  • set_state(PAUSED) on a pipeline
  • while this state async state change is happening, set_state(NULL)

application thread:

5  gst_pad_stop_task                                                                             gstpad.c             6514 0x7fffe7b1bc8a 
6  gst_type_find_element_activate_sink_mode                                                      gsttypefindelement.c 1288 0x7fffe65e5000 
7  activate_mode_internal                                                                        gstpad.c             1224 0x7fffe7b07ffe 
8  gst_pad_set_active                                                                            gstpad.c             1122 0x7fffe7b07a88 
9  activate_pads                                                                                 gstelement.c         3189 0x7fffe7ae0bd7 
10 gst_iterator_fold                                                                             gstiterator.c        618  0x7fffe7af97a2 
11 iterator_activate_fold_with_resync                                                            gstelement.c         3213 0x7fffe7ae0b25 
12 gst_element_pads_activate                                                                     gstelement.c         3258 0x7fffe7ae094b 
13 gst_element_change_state_func                                                                 gstelement.c         3323 0x7fffe7adf0db 
14 gst_type_find_element_change_state                                                            gsttypefindelement.c 1353 0x7fffe65e4cfe 
15 gst_element_change_state                                                                      gstelement.c         3101 0x7fffe7adce93 
16 gst_element_set_state_func                                                                    gstelement.c         3055 0x7fffe7adf775 
17 gst_element_set_state                                                                         gstelement.c         2956 0x7fffe7adc512 
18 gst_bin_element_set_state                                                                     gstbin.c             2582 0x7fffe7aa66c9 
19 gst_bin_change_state_func                                                                     gstbin.c             2934 0x7fffe7aa082c 
20 gst_decode_bin_change_state                                                                   gstdecodebin2.c      5500 0x7fffe646739c 
21 gst_element_change_state                                                                      gstelement.c         3101 0x7fffe7adce93 
22 gst_element_set_state_func                                                                    gstelement.c         3055 0x7fffe7adf775 
23 gst_element_set_state                                                                         gstelement.c         2956 0x7fffe7adc512 
24 gst_bin_element_set_state                                                                     gstbin.c             2582 0x7fffe7aa66c9 
25 gst_bin_change_state_func                                                                     gstbin.c             2934 0x7fffe7aa082c 
26 gst_pipeline_change_state                                                                     gstpipeline.c        534  0x7fffe7b23e06 
27 gst_element_change_state                                                                      gstelement.c         3101 0x7fffe7adce93 
28 gst_element_set_state_func                                                                    gstelement.c         3055 0x7fffe7adf775 
29 gst_element_set_state                                                                         gstelement.c         2956 0x7fffe7adc512 
30 QGstElement::setStateSync(GstState, std::chrono::duration<long, std::ratio<1l, 1000000000l>>) qgst.cpp             945  0x7fffe4cf545d 

gstreamer thread (which raises the assertion):

                                                                                                                                                                                                                  
                                                                                                                                                                                                                  
1  g_logv                                       (x86_64) /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                                                                    0x7ffff2d196a1 
2  g_log                                        (x86_64) /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                                                                    0x7ffff2d19953 
3  gst_base_src_set_format                      gstbasesrc.c                                                                                                                                  644  0x7fffe86a2648 
4  gst_app_src_start                            gstappsrc.c                                                                                                                                   1096 0x7fffea5f16fa 
5  gst_base_src_start                           gstbasesrc.c                                                                                                                                  3570 0x7fffe86ada93 
6  gst_base_src_activate_pull                   gstbasesrc.c                                                                                                                                  3994 0x7fffe86ae042 
7  gst_base_src_activate_mode                   gstbasesrc.c                                                                                                                                  4029 0x7fffe86a8eab 
8  activate_mode_internal                       gstpad.c                                                                                                                                      1224 0x7fffe7b07ffe 
9  gst_pad_activate_mode                        gstpad.c                                                                                                                                      1329 0x7fffe7b0872f 
10 activate_mode_internal                       gstpad.c                                                                                                                                      1192 0x7fffe7b07eeb 
11 gst_pad_activate_mode                        gstpad.c                                                                                                                                      1329 0x7fffe7b0872f 
12 gst_ghost_pad_internal_activate_pull_default gstghostpad.c                                                                                                                                 302  0x7fffe7aebf96 
13 gst_ghost_pad_internal_activate_mode_default gstghostpad.c                                                                                                                                 344  0x7fffe7aebcc6 
14 activate_mode_internal                       gstpad.c                                                                                                                                      1224 0x7fffe7b07ffe 
15 gst_pad_activate_mode                        gstpad.c                                                                                                                                      1329 0x7fffe7b0872f 
16 activate_mode_internal                       gstpad.c                                                                                                                                      1192 0x7fffe7b07eeb 
17 gst_pad_activate_mode                        gstpad.c                                                                                                                                      1329 0x7fffe7b0872f 
18 gst_type_find_element_activate_src_mode      gsttypefindelement.c                                                                                                                          1090 0x7fffe65e5705 
19 activate_mode_internal                       gstpad.c                                                                                                                                      1224 0x7fffe7b07ffe 
20 gst_pad_activate_mode                        gstpad.c                                                                                                                                      1329 0x7fffe7b0872f 
21 activate_mode_internal                       gstpad.c                                                                                                                                      1192 0x7fffe7b07eeb 
22 gst_pad_activate_mode                        gstpad.c                                                                                                                                      1329 0x7fffe7b0872f 
23 qtdemux_sink_activate                        qtdemux.c                                                                                                                                     8591 0x7fffe4b4ebb2 
24 gst_pad_set_active                           gstpad.c                                                                                                                                      1107 0x7fffe7b078f5 
25 activate_pads                                gstelement.c                                                                                                                                  3189 0x7fffe7ae0bd7 
26 gst_iterator_fold                            gstiterator.c                                                                                                                                 618  0x7fffe7af97a2 
27 iterator_activate_fold_with_resync           gstelement.c                                                                                                                                  3213 0x7fffe7ae0b25 
28 gst_element_pads_activate                    gstelement.c                                                                                                                                  3258 0x7fffe7ae094b 
29 gst_element_change_state_func                gstelement.c                                                                                                                                  3309 0x7fffe7adf0b1 
30 gst_qtdemux_change_state                     qtdemux.c                                                                                                                                     2681 0x7fffe4b4dc3e 
31 gst_element_change_state                     gstelement.c                                                                                                                                  3101 0x7fffe7adce93 
32 gst_element_set_state_func                   gstelement.c                                                                                                                                  3055 0x7fffe7adf775 
33 gst_element_set_state                        gstelement.c                                                                                                                                  2956 0x7fffe7adc512 
34 connect_pad                                  gstdecodebin2.c                                                                                                                               2576 0x7fffe646f856 
35 analyze_new_pad                              gstdecodebin2.c                                                                                                                               1908 0x7fffe646c5de 
36 type_found                                   gstdecodebin2.c                                                                                                                               2945 0x7fffe646aae5 
37 ___lldb_unnamed_symbol145                    (x86_64) /lib/x86_64-linux-gnu/libffi.so.8                                                                                                         0x7fffea507b16 
38 ___lldb_unnamed_symbol138                    (x86_64) /lib/x86_64-linux-gnu/libffi.so.8                                                                                                         0x7fffea5043ef 
39 ffi_call                                     (x86_64) /lib/x86_64-linux-gnu/libffi.so.8                                                                                                         0x7fffea5070be 
40 g_cclosure_marshal_generic                   (x86_64) /lib/x86_64-linux-gnu/libgobject-2.0.so.0                                                                                                 0x7fffea548db2 
41 g_closure_invoke                             (x86_64) /lib/x86_64-linux-gnu/libgobject-2.0.so.0                                                                                                 0x7fffea5422fa 
42 ___lldb_unnamed_symbol1329                   (x86_64) /lib/x86_64-linux-gnu/libgobject-2.0.so.0                                                                                                 0x7fffea57190c 
43 ___lldb_unnamed_symbol1162                   (x86_64) /lib/x86_64-linux-gnu/libgobject-2.0.so.0                                                                                                 0x7fffea562591 
44 g_signal_emit_valist                         (x86_64) /lib/x86_64-linux-gnu/libgobject-2.0.so.0                                                                                                 0x7fffea5627c1 
45 g_signal_emit                                (x86_64) /lib/x86_64-linux-gnu/libgobject-2.0.so.0                                                                                                 0x7fffea562883 
46 gst_type_find_element_emit_have_type         gsttypefindelement.c                                                                                                                          239  0x7fffe65e6d85 
47 gst_type_find_element_loop                   gsttypefindelement.c                                                                                                                          1195 0x7fffe65e6272 
48 gst_task_func                                gsttask.c                                                                                                                                     399  0x7fffe7b65705 
49 default_func                                 gsttaskpool.c                                                                                                                                 70   0x7fffe7b6670a 
50 ___lldb_unnamed_symbol2711                   (x86_64) /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                                                                    0x7ffff2d48542 
51 ___lldb_unnamed_symbol2690                   (x86_64) /lib/x86_64-linux-gnu/libglib-2.0.so.0                                                                                                    0x7ffff2d42c82 
52 asan_thread_start(void *)                    (x86_64) /home/tim/build/build-qt6-dev-clang_18_qt_dev-Debug2/qtmultimedia/tests/auto/integration/qmediaplayerbackend/tst_qmediaplayerbackend      0x55555563d43d 
53 start_thread                                 pthread_create.c                                                                                                                              447  0x7fffede9ca94 
54 __clone3                                     clone3.S                                                                                                                                      78   0x7fffedf29c3c 

is this a bug or a feature?

It looks like a bug at first glance.

Don’t suppose you could write a minimal test case to trigger it? :slightly_smiling_face:

the issue can be triggered by a unit test of qtmultimedia using the gstreamer backend. though i can see if it is possible to reduce the test case