OSDN Git Service

Fix possible memory leak
authorXiang, Haihao <haihao.xiang@intel.com>
Fri, 15 Mar 2013 08:22:57 +0000 (16:22 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Wed, 19 Jun 2013 07:20:55 +0000 (15:20 +0800)
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
(cherry picked from commit 0b07495fc24646b47952b8df7d4e6d2df2a0f72c)

va/glx/va_glx_impl.c
va/va.c

index f317961..5299589 100644 (file)
@@ -882,19 +882,25 @@ vaCreateSurfaceGLX_impl_libva(
     gl_get_current_context(&old_cs);
     new_cs = gl_create_context(ctx, &old_cs);
     if (!new_cs)
-        return VA_STATUS_ERROR_ALLOCATION_FAILED;
+        goto error;
     if (!gl_set_current_context(new_cs, NULL))
-        return VA_STATUS_ERROR_OPERATION_FAILED;
+        goto error;
 
     pSurfaceGLX = create_surface(ctx, target, texture);
     if (!pSurfaceGLX)
-        return VA_STATUS_ERROR_ALLOCATION_FAILED;
+        goto error;
 
     pSurfaceGLX->gl_context = new_cs;
     *gl_surface = pSurfaceGLX;
 
     gl_set_current_context(&old_cs, NULL);
     return VA_STATUS_SUCCESS;
+
+error:
+    if (new_cs)
+        gl_destroy_context(new_cs);
+
+    return VA_STATUS_ERROR_ALLOCATION_FAILED;    
 }
 
 static VAStatus
diff --git a/va/va.c b/va/va.c
index 851a41f..9ad2db4 100644 (file)
--- a/va/va.c
+++ b/va/va.c
@@ -217,6 +217,7 @@ static VAStatus va_openDriver(VADisplay dpy, char *driver_name)
         if (!driver_path) {
             va_errorMessage("%s L%d Out of memory!n",
                                 __FUNCTION__, __LINE__);
+            free(search_path);    
             return VA_STATUS_ERROR_ALLOCATION_FAILED;
         }