[Bug 701943] New: playbin: unit tests fail

GStreamer (bugzilla.gnome.org) bugzilla at gnome.org
Mon Jun 10 08:53:37 PDT 2013


https://bugzilla.gnome.org/show_bug.cgi?id=701943
  GStreamer | gst-plugins-base | git

           Summary: playbin: unit tests fail
    Classification: Platform
           Product: GStreamer
           Version: git
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: Normal
         Component: gst-plugins-base
        AssignedTo: gstreamer-bugs at lists.freedesktop.org
        ReportedBy: branko.subasic at axis.com
         QAContact: gstreamer-bugs at lists.freedesktop.org
     GNOME version: ---


Cloned gstreamer and gst-plugins-base 20130610. Ran unit tests, and the
following tests for playbin fail:

test_uri, test_sink_usage_video_only_stream, test_suburi_error_wrongproto,
test_suburi_error_invalidfile, test_suburi_error_unknowntype, test_refcount,
test_source_setup

They all deadlock on line 343 in gst/playback/gststreamsynchronizer.c, waiting
on a condition that's never signaled. 

The following lines 'GST_DEBUG=2,streamsynchronizer:5  GST_CHECKS=test_refcount
make elements/playbin.check' produces the following output:

0:00:00.028108833  2458       0xcadd80 DEBUG     streamsynchronizer
gststreamsynchronizer.c:800:gst_stream_synchronizer_change_state:<streamsynchronizer0>
State change NULL->READY
0:00:00.028206148  2458       0xcadd80 DEBUG     streamsynchronizer
gststreamsynchronizer.c:826:gst_stream_synchronizer_change_state:<streamsynchronizer0>
Base class state changed returned: 1
0:00:00.028699312  2458       0xcadd80 DEBUG     streamsynchronizer
gststreamsynchronizer.c:804:gst_stream_synchronizer_change_state:<streamsynchronizer0>
State change READY->PAUSED
0:00:00.028751856  2458       0xcadd80 DEBUG     streamsynchronizer
gststreamsynchronizer.c:826:gst_stream_synchronizer_change_state:<streamsynchronizer0>
Base class state changed returned: 1
0:00:00.039262243  2458       0xcb10f0 DEBUG     streamsynchronizer
gststreamsynchronizer.c:656:gst_stream_synchronizer_request_new_pad:<streamsynchronizer0>
Requesting new pad for stream 0
0:00:00.040052190  2458       0xcb10f0 DEBUG     streamsynchronizer
gststreamsynchronizer.c:276:gst_stream_synchronizer_sink_event:<streamsynchronizer0:sink_0>
Stream 0 changed
0:00:00.040123686  2458       0xcb10f0 DEBUG     streamsynchronizer
gststreamsynchronizer.c:291:gst_stream_synchronizer_sink_event:<streamsynchronizer0>
All streams have changed -- unblocking
0:00:00.040167315  2458       0xcb10f0 DEBUG     streamsynchronizer
gststreamsynchronizer.c:316:gst_stream_synchronizer_sink_event:<streamsynchronizer0>
New group start time: 0:00:00.000000000
0:00:00.056724870  2458       0xcb10f0 WARN      streamsynchronizer
gststreamsynchronizer.c:381:gst_stream_synchronizer_sink_event:<streamsynchronizer0:sink_0>
Non-TIME segment: bytes
0:00:00.056913955  2458       0xcb10f0 DEBUG     streamsynchronizer
gststreamsynchronizer.c:341:gst_stream_synchronizer_sink_event:<streamsynchronizer0:sink_0>
Stream 0 is waiting

A little debugging shows that two SEGMENT events are received, the first sent
by the basesrc when it starts, and the second is sent by the inputselector
element when it receives the first buffer, and before it forwards it it pushes
pending events, among which is a SEGMENT event. When the first SEGMENT event
arrives to the streamsyncronizer it will set it's stream->wait flag to TRUE,
because the segment is not in TIME format. When the second arrives it will
check if the ->wait flag is TRUE, and if so it will wait for the
stream->stream_finish_cond to be signaled, which will never happen because
there are no other streams.

Finally backtraces of the threads:

Thread 3 (Thread 0x2aaaae29f700 (LWP 2672)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at
../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00002aaaaba32a4f in g_cond_wait () from
/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00002aaaad852a75 in gst_queue_loop (pad=<optimized out>) at
gstqueue.c:1226
#3  0x00002aaaab1ca811 in gst_task_func (task=0x62d5a0) at gsttask.c:316
#4  0x00002aaaaba17772 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00002aaaaba16f35 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#6  0x00002aaaabcade0e in start_thread (arg=0x2aaaae29f700) at
pthread_create.c:311
#7  0x00002aaaabfab95d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 2 (Thread 0x2aaaadc75700 (LWP 2671)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at
../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00002aaaaba32a4f in g_cond_wait () from
/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00002aaaacaffa48 in gst_stream_synchronizer_sink_event
(pad=0x2aaab00124b0, parent=<optimized out>, event=0x2aaab0003520) at
gststreamsynchronizer.c:342
#3  0x00002aaaab199d0a in gst_pad_send_event_unchecked
(pad=pad at entry=0x2aaab00124b0, event=event at entry=0x2aaab0003520,
type=type at entry=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at gstpad.c:4983
#4  0x00002aaaab19a3cc in gst_pad_push_event_unchecked (pad=pad at entry=0x690250,
event=0x2aaab0003520, type=type at entry=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at
gstpad.c:4679
#5  0x00002aaaab19a9a8 in push_sticky (pad=0x690250, ev=0x2aaaadc74440,
user_data=0x2aaaadc744b0) at gstpad.c:3318
#6  0x00002aaaab19822a in events_foreach (pad=pad at entry=0x690250,
func=func at entry=0x2aaaab19a840 <push_sticky>,
user_data=user_data at entry=0x2aaaadc744b0) at gstpad.c:530
#7  0x00002aaaab1a34de in check_sticky (event=0x2aaab0003520, pad=0x690250) at
gstpad.c:3374
#8  gst_pad_push_event (pad=pad at entry=0x690250, event=0x2aaab0003520) at
gstpad.c:4796
#9  0x00002aaaab1a366f in event_forward_func (pad=0x690250,
data=0x2aaaadc74600) at gstpad.c:2735
#10 0x00002aaaab1a044b in gst_pad_forward (pad=0x6884c0,
forward=forward at entry=0x2aaaab1a3590 <event_forward_func>,
user_data=user_data at entry=0x2aaaadc74600) at gstpad.c:2689
#11 0x00002aaaab1a0bb0 in gst_pad_event_default (pad=<optimized out>,
parent=<optimized out>, event=0x2aaab0003520) at gstpad.c:2786
#12 0x00002aaaab199d0a in gst_pad_send_event_unchecked (pad=pad at entry=0x6884c0,
event=event at entry=0x2aaab0003520,
type=type at entry=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at gstpad.c:4983
#13 0x00002aaaab19a3cc in gst_pad_push_event_unchecked (pad=pad at entry=0x67eb90,
event=0x2aaab0003520, type=type at entry=GST_PAD_PROBE_TYPE_EVENT_DOWNSTREAM) at
gstpad.c:4679
#14 0x00002aaaab19a9a8 in push_sticky (pad=0x67eb90, ev=0x2aaaadc74830,
user_data=0x2aaaadc748a0) at gstpad.c:3318
#15 0x00002aaaab19822a in events_foreach (pad=pad at entry=0x67eb90,
func=func at entry=0x2aaaab19a840 <push_sticky>,
user_data=user_data at entry=0x2aaaadc748a0) at gstpad.c:530
#16 0x00002aaaab1a34de in check_sticky (event=0x2aaab0003520, pad=0x67eb90) at
gstpad.c:3374
#17 gst_pad_push_event (pad=0x67eb90, event=event at entry=0x2aaab0003520) at
gstpad.c:4796
#18 0x00002aaaad84a91e in forward_sticky_events (sinkpad=0x69e0e0,
event=<optimized out>, user_data=<optimized out>) at gstinputselector.c:757
#19 0x00002aaaab19817e in foreach_dispatch_function (pad=0x69e0e0,
ev=0x2aaaadc74960, user_data=0x2aaaadc749b0) at gstpad.c:5238
#20 0x00002aaaab19822a in events_foreach (pad=pad at entry=0x69e0e0,
func=func at entry=0x2aaaab198130 <foreach_dispatch_function>,
user_data=user_data at entry=0x2aaaadc749b0) at gstpad.c:530
#21 0x00002aaaab1a409c in gst_pad_sticky_events_foreach
(pad=pad at entry=0x69e0e0, foreach_func=foreach_func at entry=0x2aaaad84a870
<forward_sticky_events>, user_data=user_data at entry=0x62b000) at gstpad.c:5269
#22 0x00002aaaad849e2c in gst_selector_pad_chain (pad=0x69e0e0,
parent=<optimized out>, buf=0x2aaab00210a0) at gstinputselector.c:1047
#23 0x00002aaaab19bda0 in gst_pad_chain_data_unchecked (data=0x2aaab00210a0,
type=4112, pad=0x69e0e0) at gstpad.c:3708
#24 gst_pad_push_data (pad=pad at entry=0x688260, type=type at entry=4112,
data=<optimized out>, data at entry=0x2aaab00210a0) at gstpad.c:3938
#25 0x00002aaaab1a2876 in gst_pad_push (pad=pad at entry=0x688260,
buffer=buffer at entry=0x2aaab00210a0) at gstpad.c:4041
#26 0x00002aaaab18ca6b in gst_proxy_pad_chain_default (pad=<optimized out>,
parent=<optimized out>, buffer=0x2aaab00210a0) at gstghostpad.c:128
#27 0x00002aaaab19bda0 in gst_pad_chain_data_unchecked (data=0x2aaab00210a0,
type=4112, pad=0x690010) at gstpad.c:3708
#28 gst_pad_push_data (pad=pad at entry=0x67e960, type=type at entry=4112,
data=<optimized out>) at gstpad.c:3938
#29 0x00002aaaab1a2876 in gst_pad_push (pad=pad at entry=0x67e960,
buffer=<optimized out>) at gstpad.c:4041
#30 0x00002aaaaacfb7b5 in gst_base_src_loop (pad=0x67e960) at gstbasesrc.c:2726
#31 0x00002aaaab1ca811 in gst_task_func (task=0x62d000) at gsttask.c:316
#32 0x00002aaaaba17772 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#33 0x00002aaaaba16f35 in ?? () from /lib/x86_64-linux-gnu/libglib-2.0.so.0
#34 0x00002aaaabcade0e in start_thread (arg=0x2aaaadc75700) at
pthread_create.c:311
#35 0x00002aaaabfab95d in clone () at
../sysdeps/unix/sysv/linux/x86_64/clone.S:113

Thread 1 (Thread 0x2aaaacac0580 (LWP 2667)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at
../nptl/sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00002aaaaba32a4f in g_cond_wait () from
/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00002aaaab181f2a in gst_element_get_state_func (element=0x672920,
state=0x0, pending=0x0, timeout=18446744073709551615) at gstelement.c:2058
#3  0x000000000040334d in test_refcount (__i__=<optimized out>) at
elements/playbin.c:491
#4  0x00002aaaaaf325f3 in tcase_run_tfun_nofork (i=0, tc=0x669f70, sr=0x613230,
tfun=<optimized out>) at check_run.c:314
#5  srunner_iterate_tcase_tfuns (tc=0x669f70, sr=<optimized out>) at
check_run.c:181
#6  srunner_run_tcase (tc=0x669f70, sr=0x613230) at check_run.c:302
#7  srunner_iterate_suites (sr=0x613230, print_mode=<optimized out>) at
check_run.c:150
#8  srunner_run_all (sr=sr at entry=0x613230,
print_mode=print_mode at entry=CK_NORMAL) at check_run.c:561
#9  0x00002aaaaaf2c63d in gst_check_run_suite (suite=suite at entry=0x62fea0,
name=name at entry=0x404f84 "playbin", fname=fname at entry=0x404f8c
"elements/playbin.c") at gstcheck.c:689
#10 0x0000000000401d56 in main (argc=1, argv=0x7fffffffb798) at
elements/playbin.c:878

-- 
Configure bugmail: https://bugzilla.gnome.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the QA contact for the bug.
You are the assignee for the bug.


More information about the gstreamer-bugs mailing list