diff --git a/helpers/check-va-api.c b/helpers/check-va-api.c
index 46a4155eb40cbcfcebcc9c9882c716df720e0307..671c7c820f33a2bc0b294f74625ddebac83bb537 100644
--- a/helpers/check-va-api.c
+++ b/helpers/check-va-api.c
@@ -52,6 +52,18 @@ clear_va_display (VADisplay *displayp)
   clear_pointer (displayp, vaTerminate);
 }
 
+static void
+clear_surfaces (VADisplay va_display,
+                VASurfaceID *surfaces,
+                int surfaces_count)
+{
+  if (va_display && surfaces && surfaces[0] != VA_INVALID_SURFACE)
+    vaDestroySurfaces (va_display, surfaces, surfaces_count);
+
+  for (int i = 0; i < surfaces_count; i++)
+    surfaces[i] = VA_INVALID_SURFACE;
+}
+
 enum
 {
   OPTION_HELP = 1,
@@ -443,6 +455,8 @@ out:
   if (slice_data_buf != VA_INVALID_ID)
     vaDestroyBuffer (va_display, slice_data_buf);
 
+  clear_surfaces (va_display, surfaces, surfaces_count);
+
   return ret;
 }
 
@@ -524,6 +538,8 @@ out:
   if (context != VA_INVALID_ID)
     vaDestroyContext (va_display, context);
 
+  clear_surfaces (va_display, surfaces, surfaces_count);
+
   return ret;
 }
 
@@ -645,11 +661,5 @@ main (int argc,
     ret = 0;
 
 out:
-  if (va_display)
-    {
-      if (surfaces && surfaces[0] != VA_INVALID_SURFACE)
-        vaDestroySurfaces (va_display, surfaces, surfaces_count);
-    }
-
   return ret;
 }