From: Jan Schmidt Date: Fri, 30 Oct 2020 11:52:18 +0000 (+1100) Subject: sctp: Do downward state change logic after chaining up. X-Git-Tag: 1.19.3~507^2~1162 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dbeb5765318ed973376c2b595912e954fc2597d9;p=platform%2Fupstream%2Fgstreamer.git sctp: Do downward state change logic after chaining up. Call the parent state_change function first when changing state downward, to make sure that the element has stopped before cleaning it up. Part-of: --- diff --git a/ext/sctp/gstsctpdec.c b/ext/sctp/gstsctpdec.c index ab242ad..c9f6d08 100644 --- a/ext/sctp/gstsctpdec.c +++ b/ext/sctp/gstsctpdec.c @@ -299,8 +299,7 @@ gst_sctp_dec_change_state (GstElement * element, GstStateChange transition) ret = GST_STATE_CHANGE_FAILURE; break; case GST_STATE_CHANGE_PAUSED_TO_READY: - sctpdec_cleanup (self); - gst_flow_combiner_reset (self->flow_combiner); + stop_all_srcpad_tasks (self); break; default: break; @@ -309,6 +308,15 @@ gst_sctp_dec_change_state (GstElement * element, GstStateChange transition) if (ret != GST_STATE_CHANGE_FAILURE) ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); + switch (transition) { + case GST_STATE_CHANGE_PAUSED_TO_READY: + sctpdec_cleanup (self); + gst_flow_combiner_reset (self->flow_combiner); + break; + default: + break; + } + return ret; } @@ -424,7 +432,7 @@ gst_sctp_data_srcpad_loop (GstPad * pad) GST_OBJECT_UNLOCK (self); if (G_UNLIKELY (flow_ret == GST_FLOW_FLUSHING - || flow_ret == GST_FLOW_NOT_LINKED)) { + || flow_ret == GST_FLOW_NOT_LINKED) || flow_ret == GST_FLOW_EOS) { GST_DEBUG_OBJECT (pad, "Push failed on packet source pad. Error: %s", gst_flow_get_name (flow_ret)); } else if (G_UNLIKELY (flow_ret != GST_FLOW_OK)) { @@ -705,7 +713,6 @@ sctpdec_cleanup (GstSctpDec * self) NULL, NULL); g_signal_handler_disconnect (self->sctp_association, self->signal_handler_stream_reset); - stop_all_srcpad_tasks (self); gst_sctp_association_force_close (self->sctp_association); g_object_unref (self->sctp_association); self->sctp_association = NULL; diff --git a/ext/sctp/gstsctpenc.c b/ext/sctp/gstsctpenc.c index ec0767d..41590b9 100644 --- a/ext/sctp/gstsctpenc.c +++ b/ext/sctp/gstsctpenc.c @@ -346,7 +346,7 @@ gst_sctp_enc_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: - sctpenc_cleanup (self); + stop_srcpad_task (self->src_pad, self); self->src_ret = GST_FLOW_FLUSHING; break; case GST_STATE_CHANGE_READY_TO_NULL: @@ -368,6 +368,7 @@ gst_sctp_enc_change_state (GstElement * element, GstStateChange transition) case GST_STATE_CHANGE_PLAYING_TO_PAUSED: break; case GST_STATE_CHANGE_PAUSED_TO_READY: + sctpenc_cleanup (self); break; case GST_STATE_CHANGE_READY_TO_NULL: break;