input-selector: resolve deadlock issue 78/227578/2 accepted/tizen/unified/20200325.055656 submit/tizen/20200317.044702 submit/tizen/20200323.055218 submit/tizen/20200324.013709
authorEunhye Choi <eunhae1.choi@samsung.com>
Fri, 13 Mar 2020 02:51:14 +0000 (11:51 +0900)
committerEunhye Choi <eunhae1.choi@samsung.com>
Fri, 13 Mar 2020 03:28:33 +0000 (12:28 +0900)
- deadlock can be occurred by bitrate query during
  pipeline reconfiguration.
- the query is required by queue2 and almost demux reply
  the request but not all.
- deadlock can be resolved by forwarding the query to srcpad directly.
- queue2: revert bea8fc39a4798aafa5daeec6bc785937f916311d
  which is temporary patch to avoid deadlock

Change-Id: I499d1fe27cfd9db3ef66197b5b3b752c71d3446d

packaging/gstreamer.spec
plugins/elements/gstinputselector.c
plugins/elements/gstqueue2.c

index 8cebca4..6b18f14 100644 (file)
@@ -73,6 +73,7 @@ export CFLAGS="%{optflags} \
        -DTIZEN_FEATURE_BASEPARSE_MODIFICATION\
        -DTIZEN_FEATURE_QUEUE_MODIFICATION\
        -DTIZEN_FEATURE_FAKESINK_MODIFICATION\
+       -DTIZEN_FEATURE_INPUT_SELECTOR_MODIFICATION\
 %if "%{tizen_profile_name}" == "tv"
        -DTIZEN_PROFILE_TV\
        -DTIZEN_FEATURE_TRUSTZONE\
index 25b4e7f..838e9b0 100644 (file)
@@ -667,6 +667,10 @@ gst_selector_pad_query (GstPad * pad, GstObject * parent, GstQuery * query)
     case GST_QUERY_POSITION:
     case GST_QUERY_DURATION:
     case GST_QUERY_CONTEXT:
+#ifdef TIZEN_FEATURE_INPUT_SELECTOR_MODIFICATION
+    /* to resolve deadlock during reconfiguration. */
+    case GST_QUERY_BITRATE:
+#endif
       /* always proxy caps/position/duration/context queries, regardless of active pad or not
        * See https://bugzilla.gnome.org/show_bug.cgi?id=775445 */
       res = gst_pad_peer_query (self->srcpad, query);
index 968217b..b2c22c7 100644 (file)
@@ -3325,11 +3325,8 @@ gst_queue2_handle_src_event (GstPad * pad, GstObject * parent, GstEvent * event)
       }
       GST_QUEUE2_MUTEX_UNLOCK (queue);
 
-#ifndef TIZEN_FEATURE_QUEUE2_MODIFICATION
       /* force a new bitrate query to be performed */
-      /* FIXME: Deadlock occurs in some streaming case(rtsp, mp3/ogv http streaming) */
       query_downstream_bitrate (queue);
-#endif
 
       res = gst_pad_push_event (queue->sinkpad, event);
       break;