open-src/xserver/xvnc/vnc-privates.patch
author Alan Coopersmith <Alan.Coopersmith@Sun.COM>
Thu, 15 Jan 2009 12:55:00 -0800
changeset 606 068c11b419c9
permissions -rw-r--r--
6582489 X11R7.4: Xorg server 1.5.3, Mesa 7.2, and associated driver updates Includes changes contributed by Liang, Kan <[email protected]>: - G41 support patches - DRM_CAS in libdrm type error can cause deadlock and hang the glxgears. Includes changes contributed by Martin Bochnig <[email protected]>: - Make SUNWxorg-mesa package platform-clean

## Patch originally from Fedora - Revision 1.1 of:
http://cvs.fedoraproject.org/viewvc/rpms/vnc/devel/vnc-privates.patch
with paths adjusted to match sources in tarball before files are moved

--- a/unix/xc/programs/Xserver/vnc/vncHooks.cc	Mon Jan 21 17:29:11 2008 +0100
+++ b/unix/xc/programs/Xserver/vnc/vncHooks.cc	Thu Jan 24 09:50:48 2008 +0100
@@ -86,9 +86,15 @@ typedef struct {
     GCOps *wrappedOps;
 } vncHooksGCRec, *vncHooksGCPtr;
 
-static int vncHooksScreenIndex;
-static int vncHooksGCIndex;
+static DevPrivateKey vncHooksScrPrivateKey = &vncHooksScrPrivateKey;
+static DevPrivateKey vncHooksGCPrivateKey = &vncHooksGCPrivateKey;
 
+#define vncHooksScreenPrivate(scrn) \
+	(vncHooksScreenPtr) dixLookupPrivate (&(scrn)->devPrivates, \
+					      vncHooksScrPrivateKey)
+#define vncHooksGCPrivate(pGC) \
+	(vncHooksGCPtr) dixLookupPrivate (&(pGC)->devPrivates, \
+					  vncHooksGCPrivateKey)
 
 // screen functions
 
@@ -209,26 +215,11 @@ Bool vncHooksInit(ScreenPtr pScreen, Xse
   if (vncHooksGeneration != serverGeneration) {
     vncHooksGeneration = serverGeneration;
 
-    vncHooksScreenIndex = AllocateScreenPrivateIndex();
-    if (vncHooksScreenIndex < 0) {
-      ErrorF("vncHooksInit: AllocateScreenPrivateIndex failed\n");
-      return FALSE;
-    }
-
-    vncHooksGCIndex = AllocateGCPrivateIndex();
-    if (vncHooksGCIndex < 0) {
-      ErrorF("vncHooksInit: AllocateGCPrivateIndex failed\n");
-      return FALSE;
-    }
-  }
-
-  if (!AllocateGCPrivate(pScreen, vncHooksGCIndex, sizeof(vncHooksGCRec))) {
-    ErrorF("vncHooksInit: AllocateGCPrivate failed\n");
-    return FALSE;
+    if (!dixRequestPrivate (vncHooksGCPrivateKey, sizeof (vncHooksGCRec)))
+	return FALSE;
   }
 
   vncHooksScreen = (vncHooksScreenPtr)xnfalloc(sizeof(vncHooksScreenRec));
-  pScreen->devPrivates[vncHooksScreenIndex].ptr = (pointer)vncHooksScreen;
 
   vncHooksScreen->desktop = desktop;
 
@@ -266,6 +257,8 @@ Bool vncHooksInit(ScreenPtr pScreen, Xse
   pScreen->DisplayCursor = vncHooksDisplayCursor;
   pScreen->BlockHandler = vncHooksBlockHandler;
 
+  dixSetPrivate (&pScreen->devPrivates, vncHooksScrPrivateKey, vncHooksScreen);
+
   return TRUE;
 }
 
@@ -281,11 +274,10 @@ Bool vncHooksInit(ScreenPtr pScreen, Xse
 // distinct type, so it would have to use templates, and it's not worth that
 // much pain.
 
-#define SCREEN_UNWRAP(scrn,field)                                         \
-  ScreenPtr pScreen = scrn;                                               \
-  vncHooksScreenPtr vncHooksScreen                                        \
-    = ((vncHooksScreenPtr)pScreen->devPrivates[vncHooksScreenIndex].ptr); \
-  pScreen->field = vncHooksScreen->field;                                 \
+#define SCREEN_UNWRAP(scrn,field) \
+  ScreenPtr pScreen = scrn; \
+  vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate (scrn); \
+  pScreen->field = vncHooksScreen->field; \
   DBGPRINT((stderr,"vncHooks" #field " called\n"));
 
 #define SCREEN_REWRAP(field) pScreen->field = vncHooks##field;
@@ -322,8 +314,7 @@ static Bool vncHooksCreateGC(GCPtr pGC)
 {
   SCREEN_UNWRAP(pGC->pScreen, CreateGC);
     
-  vncHooksGCPtr vncHooksGC
-    = (vncHooksGCPtr)pGC->devPrivates[vncHooksGCIndex].ptr;
+  vncHooksGCPtr vncHooksGC = vncHooksGCPrivate (pGC);
 
   Bool ret = (*pScreen->CreateGC) (pGC);
 
@@ -507,7 +498,7 @@ class GCFuncUnwrapper {
 class GCFuncUnwrapper {
 public:
   GCFuncUnwrapper(GCPtr pGC_) : pGC(pGC_) {
-    vncHooksGC = (vncHooksGCPtr)pGC->devPrivates[vncHooksGCIndex].ptr;
+    vncHooksGC = vncHooksGCPrivate (pGC);
     pGC->funcs = vncHooksGC->wrappedFuncs;
     if (vncHooksGC->wrappedOps)
       pGC->ops = vncHooksGC->wrappedOps;
@@ -592,7 +583,7 @@ public:
   GCOpUnwrapper(DrawablePtr pDrawable, GCPtr pGC_)
     : pGC(pGC_), pScreen(pDrawable->pScreen)
   {
-    vncHooksGC = (vncHooksGCPtr)pGC->devPrivates[vncHooksGCIndex].ptr;
+    vncHooksGC = vncHooksGCPrivate (pGC);
     oldFuncs = pGC->funcs;
     pGC->funcs = vncHooksGC->wrappedFuncs;
     pGC->ops = vncHooksGC->wrappedOps;
@@ -611,8 +602,7 @@ public:
 #define GC_OP_UNWRAPPER(pDrawable, pGC, name)                             \
   GCOpUnwrapper u(pDrawable, pGC);                                        \
   ScreenPtr pScreen = (pDrawable)->pScreen;                               \
-  vncHooksScreenPtr vncHooksScreen                                        \
-    = ((vncHooksScreenPtr)pScreen->devPrivates[vncHooksScreenIndex].ptr); \
+  vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate (pScreen);	  \
   DBGPRINT((stderr,"vncHooks" #name " called\n"));
 
 
@@ -1511,8 +1501,7 @@ static void vncHooksComposite(CARD8 op, 
                               INT16 xDst, INT16 yDst, CARD16 width, CARD16 height)
 {
     ScreenPtr           pScreen = pDst->pDrawable->pScreen;
-    vncHooksScreenPtr vncHooksScreen = \
-        ((vncHooksScreenPtr)pScreen->devPrivates[vncHooksScreenIndex].ptr);
+    vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate (pScreen);
     PictureScreenPtr    ps = GetPictureScreen(pScreen);
     BoxRec              box;
 
@@ -1534,8 +1523,7 @@ static void vncHooksGlyphs(CARD8 op, Pic
                            GlyphListPtr list, GlyphPtr *glyphs)
 {
     ScreenPtr           pScreen = pDst->pDrawable->pScreen;
-    vncHooksScreenPtr vncHooksScreen = \
-        ((vncHooksScreenPtr)pScreen->devPrivates[vncHooksScreenIndex].ptr);
+    vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate (pScreen);
     PictureScreenPtr    ps = GetPictureScreen(pScreen);
     int                 x, y;
     int                 n;