Plugin rtmp segmentation fault when stopping stream almost immediately
Submitted by Athanasios Oikonomou
Link to original bug (#739263)
Description
Created attachment 289484
segmentation fault of rtmp when stopping stream almost immediately
Stopping rtmp stream almost immediately after start causes segmentation fault.
This observed using Enigma2 and changing fast between rtmp streams. The segmentation fault is happening when Enigma2 tries to stop the stream using gst_element_set_state(m_gst_playbin, GST_STATE_NULL).
Before the Enigma2 crashed the following messages appearing:
eServiceMP3::stop gst_element_get_state
eServiceMP3::stop gst_element_get_state PLAYING -> VOID_PENDING
eServiceMP3::stop rtmp://live2.ertopen.com/live2/e600 live=1 timeout=10
eServiceMP3::stop done...
eServiceMP3::m_nownext_timer->stop
eServiceMP3::m_nownext_timer->stop done
eServiceMP3::~eServiceMP3
eServiceMP3::destruct!
eServiceMP3::eServiceMP3
eServiceMP3::construct!
getResolvedKey config.mediaplayer.extraHeaders failed !! (Typo??)
eServiceMP3::playbin uri=rtmp://82.192.84.30:1935/live/myStream.sdp
eServiceMP3::start
eServiceMP3::starting pipeline
eServiceMP3::updateEpgCacheNowNext
resolved to PLAY
gst_element_query_position failed in getPlayPosition
resolved to PLAY
gst_element_query_position failed in getPlayPosition
resolved to PLAY
gst_element_query_position failed in getPlayPosition
new service started! trying to download cuts!
download failed, no cuesheet interface
RemovePopup, id = ZapError
[DVBCAHandler] no more services
release cached channel (timer timeout)
[eDVBLocalTimerHandler] remove channel 0x1794af8
[eEPGCache] remove channel 0x1794af8
[EPGC] abort caching events !!
stop release channel timer
eTsRemoteSource::gst_message from playbin: GstMessageStateChanged, old-state=(GstState)GST_STATE_NULL, new-state=(GstState)GST_STATE_READY, pending-state=(GstState)GST_STATE_PLAYING;
eServiceMP3::state transition NULL -> READY
eTsRemoteSource::gst_message from src: GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_CREATE, owner=(GstElement)"(GstRTMPSrc)\ source", object=(GstTask)"(GstTask)\ source:src";
eTsRemoteSource::gst_message from src: GstMessageStreamStatus, type=(GstStreamStatusType)GST_STREAM_STATUS_TYPE_ENTER, owner=(GstElement)"(GstRTMPSrc)\ source", object=(GstTask)"(GstTask)\ source:src";
action -> InfobarChannelSelection keyUp
action -> OkCancelActions ok
playing 4097:0:1:0:0:0:0:0:0:0:rtmp%3a//live2.ertopen.com/live2/e600 live=1 timeout=10:!Ert3 Open {Rtmp}
eServiceMP3::stop
eServiceMP3::stop gst_element_get_state
eServiceMP3::stop gst_element_get_state READY -> PLAYING
eServiceMP3::stop rtmp://82.192.84.30:1935/live/myStream.sdp
Segmentation fault (core dumped)
The backtrace from the above core dump shows the following information:
(gdb) bt
#0 0x80004f82 in ?? ()
#1 0x73a1371c in RTMP_ReadPacket (r=0x1788400, packet=0x709f6a68) at rtmp.c:3705
#2 0x73a17b80 in RTMP_GetNextMediaPacket (r=0x1788400, packet=0x709f6a68) at rtmp.c:1181
#3 0x73a17ccc in Read_1_Packet (r=0x1788400,
buf=0x72e1b1d2 "\312\342\242\353m\212\306\a`:\252h\351\065,\340\310we\335b*Y\\\200\224m\256=\323\222\340u\n\357\002X\264+\271g*:\275\316\066\225dk\037\320f9S\036Y\273=\307\245\350<\313\367\224\203v\356h\020\242\253\304z\377\317\212\004\302\225G\361\016\313\037\232\336\352\361\020\331C&\372\313\246\211\v\336:M\356\300\021]\237\024\347\345\251", buflen=3454) at rtmp.c:4499
#4 0x73a187f8 in RTMP_Read (r=0x1788400,
buf=0x72e1b1d2 "\312\342\242\353m\212\306\a`:\252h\351\065,\340\310we\335b*Y\\\200\224m\256=\323\222\340u\n\357\002X\264+\271g*:\275\316\066\225dk\037\320f9S\036Y\273=\307\245\350<\313\367\224\203v\356h\020\242\253\304z\377\317\212\004\302\225G\361\016\313\037\232\336\352\361\020\331C&\372\313\246\211\v\336:M\356\300\021]\237\024\347\345\251", size=3454) at rtmp.c:5063
#5 0x73a33cac in gst_rtmp_src_create (pushsrc=0x17835c8, buffer=0x709f6c68)
at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0-plugins-bad/1.4.3-r4/gst-plugins-bad-1.4.3/ext/rtmp/gstrtmpsrc.c:333
#6 0x768ae0bc in gst_base_src_get_range (src=0x17835c8, offset=<optimized out>, length=4096, buf=0x709f6d58)
at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.3-r1/gstreamer-1.4.3/libs/gst/base/gstbasesrc.c:2445
#7 0x768b0588 in gst_base_src_loop (pad=0x17ca978)
at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.3-r1/gstreamer-1.4.3/libs/gst/base/gstbasesrc.c:2721
#8 0x77611b1c in gst_task_func (task=0x72e2ce10)
at /opt/openpli/openpligst/build/tmp/work/mips32el-oe-linux/gstreamer1.0/1.4.3-r1/gstreamer-1.4.3/gst/gsttask.c:317
#9 0x77462be0 in ?? () from /usr/lib/libglib-2.0.so.0
Also a log (with the last 245 lines) is attached using command GST_DEBUG_NO_COLOR=1 GST_DEBUG=*:6 enigma2 > segmentation_fault.log
Attachment 289484, "segmentation fault of rtmp when stopping stream almost immediately":
segmentation_fault.log
Version: 1.4.3