decodebin3: Add input_lock whenever add and remove DecodebinInputStream
Submitted by HoonHee Lee
Link to original bug (#777729)
Description
Hello All.
When decodebin3 has multiple parsebins, segmentation fault is observed sometimes when playbin3 pipeline goes to PLAYING to NULL.
http://hls-streamer2-dev.minutv.ee/2d6870d65cd1b616ec04c107288081a9_1467970545web/vod/indur_test_lg/index.m3u8
Test Stream:Above HLS stream contains 1-video and 2-audio and number of parsebin is 3.
When create_input_stream () function is called at the same time by each pending pads, one DecodebinInputStream can not be inserted 'dbin->input_streams' list
and other DecodebinInputStream is added to 'dbin->input_streams' list.
So, length of 'dbin->input_streams' it not 3.
Thus, when playbin3 goes to PLAYING to NULL, parsebin_pad_removed_cb () function is called but, remove_input_stream () function is not called.
Because, we could not find corresponded DecodebinInputStream from 'dbin->input_streams'.
And then, segmentation fault is happened trying to "gst_pad_unlink (slot->input->srcpad, slot->sink_pad);" in free_multiqueue_slot () function.
Thanks.
Version: 1.11.1