PAD_LOCK_EVENT (aggpad);
- while (aggpad->buffer) {
+ while (aggpad->buffer && g_atomic_int_get (&aggpad->priv->flushing) == FALSE) {
GST_DEBUG_OBJECT (aggpad, "Waiting for buffer to be consumed");
PAD_WAIT_EVENT (aggpad);
}
if (GST_QUERY_IS_SERIALIZED (query)) {
PAD_LOCK_EVENT (aggpad);
- while (aggpad->buffer) {
+
+ if (g_atomic_int_get (&aggpad->priv->flushing) == TRUE) {
+ PAD_UNLOCK_EVENT (aggpad);
+ goto flushing;
+ }
+
+ while (aggpad->buffer
+ && g_atomic_int_get (&aggpad->priv->flushing) == FALSE) {
GST_DEBUG_OBJECT (aggpad, "Waiting for buffer to be consumed");
PAD_WAIT_EVENT (aggpad);
}
if (GST_EVENT_IS_SERIALIZED (event) && GST_EVENT_TYPE (event) != GST_EVENT_EOS
&& GST_EVENT_TYPE (event) != GST_EVENT_SEGMENT_DONE) {
PAD_LOCK_EVENT (aggpad);
- while (aggpad->buffer) {
+
+ if (g_atomic_int_get (&aggpad->priv->flushing) == TRUE
+ && GST_EVENT_TYPE (event) != GST_EVENT_FLUSH_STOP) {
+ PAD_UNLOCK_EVENT (aggpad);
+ goto flushing;
+ }
+
+ while (aggpad->buffer
+ && g_atomic_int_get (&aggpad->priv->flushing) == FALSE) {
GST_DEBUG_OBJECT (aggpad, "Waiting for buffer to be consumed");
PAD_WAIT_EVENT (aggpad);
}