va: always create a new VA display on X11
authorXiang, Haihao <haihao.xiang@intel.com>
Mon, 16 May 2011 03:42:51 +0000 (11:42 +0800)
committerXiang, Haihao <haihao.xiang@intel.com>
Mon, 16 May 2011 03:57:12 +0000 (11:57 +0800)
Previously a VA display will be shared if a native display is shared by
multiple threads, it will casue some thread safety issue in a multi-threaded
program.

Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
va/x11/va_x11.c

index 7a917f3..fd7e517 100644 (file)
 #include <fcntl.h>
 #include <errno.h>
 
-static VADisplayContextP pDisplayContexts = NULL;
-
 static int va_DisplayContextIsValid (
     VADisplayContextP pDisplayContext
 )
 {
-    VADisplayContextP ctx = pDisplayContexts;
-
-    while (ctx)
-    {
-       if (ctx == pDisplayContext && pDisplayContext->pDriverContext)
-           return 1;
-       ctx = ctx->pNext;
-    }
-    return 0;
+    return (pDisplayContext != NULL && 
+            pDisplayContext->pDriverContext != NULL);
 }
 
 static void va_DisplayContextDestroy (
     VADisplayContextP pDisplayContext
 )
 {
-    VADisplayContextP *ctx = &pDisplayContexts;
-
-    /* Throw away pDisplayContext */
-    while (*ctx)
-    {
-       if (*ctx == pDisplayContext)
-       {
-           *ctx = pDisplayContext->pNext;
-           pDisplayContext->pNext = NULL;
-           break;
-       }
-       ctx = &((*ctx)->pNext);
-    }
+    if (pDisplayContext == NULL)
+        return;
+
     free(pDisplayContext->pDriverContext->dri_state);
     free(pDisplayContext->pDriverContext);
     free(pDisplayContext);
@@ -175,22 +156,11 @@ VADisplay vaGetDisplay (
 )
 {
   VADisplay dpy = NULL;
-  VADisplayContextP pDisplayContext = pDisplayContexts;
+  VADisplayContextP pDisplayContext;
 
   if (!native_dpy)
       return NULL;
 
-  while (pDisplayContext)
-  {
-      if (pDisplayContext->pDriverContext &&
-         pDisplayContext->pDriverContext->native_dpy == (void *)native_dpy)
-      {
-          dpy = (VADisplay)pDisplayContext;
-          break;
-      }
-      pDisplayContext = pDisplayContext->pNext;
-  }
-
   if (!dpy)
   {
       /* create new entry */
@@ -204,13 +174,11 @@ VADisplay vaGetDisplay (
          pDisplayContext->vadpy_magic = VA_DISPLAY_MAGIC;          
 
          pDriverContext->native_dpy       = (void *)native_dpy;
-         pDisplayContext->pNext           = pDisplayContexts;
          pDisplayContext->pDriverContext  = pDriverContext;
          pDisplayContext->vaIsValid       = va_DisplayContextIsValid;
          pDisplayContext->vaDestroy       = va_DisplayContextDestroy;
          pDisplayContext->vaGetDriverName = va_DisplayContextGetDriverName;
           pDisplayContext->opaque          = NULL;
-         pDisplayContexts                 = pDisplayContext;
          pDriverContext->dri_state        = dri_state;
          dpy                              = (VADisplay)pDisplayContext;
       }