diff --git a/sys/msdk/gstmsdkdec.c b/sys/msdk/gstmsdkdec.c
index 134459fab246159ec8c908cef726af534fb93c4c..024aae44a983121815a2a519211cdacf429d6658 100644
--- a/sys/msdk/gstmsdkdec.c
+++ b/sys/msdk/gstmsdkdec.c
@@ -1041,6 +1041,12 @@ gst_msdkdec_handle_frame (GstVideoDecoder * decoder, GstVideoCodecFrame * frame)
       /* If device is busy, wait 1ms and retry, as per MSDK's recomendation */
       g_usleep (1000);
 
+      if (task->surface &&
+          task->surface == surface->surface && !task->sync_point) {
+        free_surface (thiz, surface);
+        surface = NULL;
+      }
+
       /* If the current surface is still busy, we should do sync oepration
        * then tries to decode again
        */