From e91a53f69360290c47d00d999da8869d3622143a Mon Sep 17 00:00:00 2001 From: "U. Artie Eoff" Date: Fri, 4 Jan 2019 11:57:52 -0800 Subject: [PATCH] msdkenc: break out of flush frames loop on error In general, we should assume any unhandled error is non-recoverable. In the flush frames loop, some error states can cause us to never increment the task and therefore we get stuck in an infinite loop and generate GST_ELEMENT_ERROR over and over again. This eventually consumes all system memory and triggers OOM. Thus, assume the worst and break out of the loop upon the first "unhandled" error. https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/issues/859 --- sys/msdk/gstmsdkenc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sys/msdk/gstmsdkenc.c b/sys/msdk/gstmsdkenc.c index bc9d4d36e8..c3e16ce75f 100644 --- a/sys/msdk/gstmsdkenc.c +++ b/sys/msdk/gstmsdkenc.c @@ -830,6 +830,7 @@ gst_msdkenc_flush_frames (GstMsdkEnc * thiz, gboolean discard) if (status != MFX_ERR_NONE && status != MFX_ERR_MORE_DATA) { GST_ELEMENT_ERROR (thiz, STREAM, ENCODE, ("Encode frame failed."), ("MSDK encode error (%s)", msdk_status_to_string (status))); + break; } if (task->sync_point) {