Fix memory leak (VADriverContext.dri_state). 33/433/1
authorGwenole Beauchesne <gbeauchesne@splitted-desktop.com>
Wed, 8 Jul 2009 07:53:37 +0000 (07:53 +0000)
committerAustin Yuan <shengquan.yuan@intel.com>
Wed, 8 Jul 2009 09:42:05 +0000 (17:42 +0800)
Signed-off-by: Austin Yuan <shengquan.yuan@intel.com>
src/x11/va_x11.c

index 5e69d6b..46911fc 100644 (file)
@@ -93,6 +93,7 @@ static void va_DisplayContextDestroy (
        }
        ctx = &((*ctx)->pNext);
     }
+    free(pDisplayContext->pDriverContext->dri_state);
     free(pDisplayContext->pDriverContext);
     free(pDisplayContext);
 }
@@ -197,9 +198,11 @@ VADisplay vaGetDisplay (
   {
       /* create new entry */
       VADriverContextP pDriverContext;
+      struct dri_state *dri_state;
       pDisplayContext = calloc(1, sizeof(*pDisplayContext));
       pDriverContext  = calloc(1, sizeof(*pDriverContext));
-      if (pDisplayContext && pDriverContext)
+      dri_state       = calloc(1, sizeof(*dri_state));
+      if (pDisplayContext && pDriverContext && dri_state)
       {
          pDriverContext->old_pNext        = (void *)(unsigned long)0xdeadbeef;
          pDriverContext->x11_dpy          = native_dpy;
@@ -209,7 +212,7 @@ VADisplay vaGetDisplay (
          pDisplayContext->vaDestroy       = va_DisplayContextDestroy;
          pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName;
          pDisplayContexts                 = pDisplayContext;
-         pDriverContext->dri_state        = calloc(1, sizeof(struct dri_state));
+         pDriverContext->dri_state        = dri_state;
          dpy                              = (VADisplay)pDisplayContext;
       }
       else
@@ -218,6 +221,8 @@ VADisplay vaGetDisplay (
              free(pDisplayContext);
          if (pDriverContext)
              free(pDriverContext);
+          if (dri_state)
+              free(dri_state);
       }
   }