[Bug 774600] mpegtsdemux: Pipeline hang on lossy transport stream
GStreamer (GNOME Bugzilla)
bugzilla at gnome.org
Fri Nov 18 02:18:31 UTC 2016
https://bugzilla.gnome.org/show_bug.cgi?id=774600
--- Comment #6 from minfrin at sharp.fm ---
Digging further, I am able to reproduce the hang using just the tsdemux element
alone, like this:
gst-launch-1.0 filesrc location=/mnt/stream/raw.ts ! progressreport
update-freq=5 ! tsdemux ! fakesink
When it hangs, the backtrace of all threads looks like this:
0:00:07.177036844 26676 0x19dac0 DEBUG tsdemux
tsdemux.c:2562:gst_ts_demux_push_pending_data:<tsdemux0:subpicture_0_1d51>
stream:0x75b20750, pid:0x1d51 stream_type:6 state:0
^C
Program received signal SIGINT, Interrupt.
0x76bf5b80 in poll () at ../sysdeps/unix/syscall-template.S:81
81 ../sysdeps/unix/syscall-template.S: No such file or directory.
(gdb) thread apply all backtrace
Thread 3 (Thread 0x75aff460 (LWP 26684)):
Cannot access memory at address 0x1
#0 0x76bf5b80 in poll () at ../sysdeps/unix/syscall-template.S:81
#1 0x76d0a528 in ?? () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
Cannot access memory at address 0x1
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Thread 2 (Thread 0x7645c460 (LWP 26683)):
#0 syscall () at ../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
#1 0x76d5443c in g_cond_wait () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
#2 0x76f30670 in gst_task_func (task=0x1a1828) at gsttask.c:319
#3 0x76f31e50 in default_func (tdata=0x19bac0, pool=0x38458) at
gsttaskpool.c:68
#4 0x76d3445c in ?? () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
Thread 1 (Thread 0x76ff5210 (LWP 26676)):
Cannot access memory at address 0x1
#0 0x76bf5b80 in poll () at ../sysdeps/unix/syscall-template.S:81
#1 0x76d0a528 in ?? () from /lib/arm-linux-gnueabihf/libglib-2.0.so.0
Cannot access memory at address 0x1
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
(gdb) threads info
Undefined command: "threads". Try "help".
(gdb) info threads
Id Target Id Frame
3 Thread 0x75aff460 (LWP 26684) "gmain" 0x76bf5b80 in poll () at
../sysdeps/unix/syscall-template.S:81
2 Thread 0x7645c460 (LWP 26683) "tsdemux0:sink" syscall () at
../ports/sysdeps/unix/sysv/linux/arm/syscall.S:37
* 1 Thread 0x76ff5210 (LWP 26676) "gst-launch-1.0" 0x76bf5b80 in poll () at
../sysdeps/unix/syscall-template.S:81
The second thread seems to be stuck with a task that has been paused, like so:
#2 0x76f30670 in gst_task_func (task=0x1a1828) at gsttask.c:319
319 GST_TASK_WAIT (task);
(gdb) print *task
$1 = {object = {object = {g_type_instance = {g_class = 0x3a528}, ref_count = 2,
qdata = 0x0}, lock = {p = 0x0, i = {0, 0}}, name = 0x75b00c98 "tsdemux0:sink",
parent = 0x0, flags = 0, control_bindings = 0x0, control_rate = 100000000,
last_sync = 18446744073709551615, _gst_reserved = 0x0}, state =
GST_TASK_PAUSED, cond = {p = 0x0, i = {1, 0}}, lock = 0x184474, func =
0x7671f5dc <mpegts_base_loop>, user_data = 0x18e188, notify = 0x0, running = 1,
thread = 0x19dac0,
priv = 0x1a1800, _gst_reserved = {0x0, 0x0, 0x0, 0x0}}
Does this code look right? We seem to start the task before unlocking
base->sinkpad, is this correct?
done:
if (flush_event)
gst_event_unref (flush_event);
gst_pad_start_task (base->sinkpad, (GstTaskFunction) mpegts_base_loop, base,
NULL);
GST_PAD_STREAM_UNLOCK (base->sinkpad);
return ret == GST_FLOW_OK;
--
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