--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/open-src/xserver/xorg/pre-faster-devPrivates.patch Thu Jan 15 12:55:00 2009 -0800
@@ -0,0 +1,1498 @@
+[Adjusted to apply to xserver-1.5.2]
+
+From ebea78cdba0ff14a397239ee1936bd254c181e1b Mon Sep 17 00:00:00 2001
+From: Tomas Carnecky <[email protected]>
+Date: Thu, 28 Aug 2008 18:05:40 -0400
+Subject: [PATCH] Prepare for array-index based devPrivates.
+
+TODO: static indices can be made just an int; some indices
+can be combined.
+---
+ Xext/geext.c | 3 ++-
+ Xext/mbuf.c | 6 ++++--
+ Xext/panoramiX.c | 6 ++++--
+ Xext/saver.c | 3 ++-
+ Xext/security.c | 3 ++-
+ Xext/shm.c | 3 ++-
+ Xext/xevie.c | 4 +++-
+ Xext/xselinux.c | 9 ++++++---
+ Xext/xvmain.c | 3 ++-
+ Xext/xvmc.c | 5 +++--
+ Xi/extinit.c | 3 ++-
+ composite/compext.c | 3 ++-
+ composite/compinit.c | 9 ++++++---
+ damageext/damageext.c | 4 +++-
+ dbe/dbe.c | 6 ++++--
+ dbe/midbe.c | 9 ++++++---
+ dix/devices.c | 6 ++++--
+ dix/events.c | 3 ++-
+ dix/window.c | 3 ++-
+ exa/exa.c | 6 ++++--
+ fb/fballpriv.c | 11 ++++++++---
+ fb/fboverlay.c | 3 ++-
+ glx/glxext.c | 3 ++-
+ glx/glxscreens.c | 3 ++-
+ hw/dmx/dmxscrinit.c | 19 +++++++++++++------
+ hw/kdrive/ephyr/ephyrdriext.c | 6 ++++--
+ hw/kdrive/src/kdrive.c | 3 ++-
+ hw/kdrive/src/kxv.c | 7 ++++---
+ hw/xfree86/common/xf86DGA.c | 5 +++--
+ hw/xfree86/common/xf86DPMS.c | 5 +++--
+ hw/xfree86/common/xf86Globals.c | 9 ++++++---
+ hw/xfree86/common/xf86RAC.c | 6 ++++--
+ hw/xfree86/common/xf86RandR.c | 5 +++--
+ hw/xfree86/common/xf86VidMode.c | 5 +++--
+ hw/xfree86/common/xf86cmap.c | 8 +++++---
+ hw/xfree86/common/xf86fbman.c | 8 +++++---
+ hw/xfree86/common/xf86sbusBus.c | 3 ++-
+ hw/xfree86/common/xf86xv.c | 6 ++++--
+ hw/xfree86/common/xf86xvmc.c | 3 ++-
+ hw/xfree86/dixmods/extmod/xf86dga2.c | 3 ++-
+ hw/xfree86/dixmods/extmod/xf86vmode.c | 8 +++++---
+ hw/xfree86/dri/dri.c | 7 ++++---
+ hw/xfree86/dri2/dri2.c | 9 ++++++---
+ hw/xfree86/exa/examodule.c | 3 ++-
+ hw/xfree86/modes/xf86RandR12.c | 3 ++-
+ hw/xfree86/ramdac/xf86Cursor.c | 3 ++-
+ hw/xfree86/shadowfb/shadow.c | 6 ++++--
+ hw/xfree86/xaa/xaaInit.c | 9 ++++++---
+ hw/xfree86/xaa/xaaOverlayDF.c | 3 ++-
+ hw/xfree86/xaa/xaaStateChange.c | 3 ++-
+ hw/xfree86/xaa/xaaWrapper.c | 6 ++++--
+ hw/xnest/GC.c | 3 ++-
+ hw/xnest/Pixmap.c | 3 ++-
+ hw/xnest/Screen.c | 3 ++-
+ hw/xnest/Window.c | 3 ++-
+ hw/xquartz/darwin.c | 3 ++-
+ hw/xquartz/quartz.c | 3 ++-
+ hw/xquartz/xpr/dri.c | 9 ++++++---
+ hw/xquartz/xpr/xprCursor.c | 3 ++-
+ hw/xwin/winglobals.c | 15 ++++++++++-----
+ mi/mibank.c | 7 +++++--
+ mi/midispcur.c | 7 ++++---
+ mi/mioverlay.c | 6 ++++--
+ mi/mipointer.c | 6 ++++--
+ mi/miscrinit.c | 6 ++++--
+ mi/misprite.c | 6 ++++--
+ miext/cw/cw.c | 12 ++++++++----
+ miext/damage/damage.c | 12 ++++++++----
+ miext/rootless/rootlessScreen.c | 12 ++++++++----
+ miext/shadow/shadow.c | 3 ++-
+ randr/randr.c | 6 ++++--
+ record/record.c | 3 ++-
+ render/animcur.c | 4 +++-
+ render/picture.c | 6 ++++--
+ render/render.c | 3 ++-
+ xfixes/cursor.c | 4 +++-
+ xfixes/xfixes.c | 4 +++-
+ xkb/xkbActions.c | 3 ++-
+ 78 files changed, 287 insertions(+), 146 deletions(-)
+
+#diff --git a/Xext/geext.c b/Xext/geext.c
+#index 171fda1..8de4e7c 100644
+#--- a/Xext/geext.c
+#+++ b/Xext/geext.c
+#@@ -40,7 +40,8 @@ #define rClient(obj) (clients[CLIENT_ID(
+#
+# int GEEventBase;
+# int GEErrorBase;
+#-DevPrivateKey GEClientPrivateKey = &GEClientPrivateKey;
+#+static int GEClientPrivateKeyIndex;
+#+DevPrivateKey GEClientPrivateKey = &GEClientPrivateKeyIndex;
+# int GEEventType; /* The opcode for all GenericEvents will have. */
+#
+# int RT_GECLIENT = 0;
+diff --git a/Xext/mbuf.c b/Xext/mbuf.c
+index 08b9334..a23a4fa 100644
+--- a/Xext/mbuf.c
++++ b/Xext/mbuf.c
+@@ -61,8 +61,10 @@ #define ValidEventMasks (ExposureMask|Mu
+
+ static int MultibufferEventBase;
+ static int MultibufferErrorBase;
+-static DevPrivateKey MultibufferScreenPrivKey = &MultibufferScreenPrivKey;
+-static DevPrivateKey MultibufferWindowPrivKey = &MultibufferWindowPrivKey;
++static int MultibufferScreenPrivKeyIndex;
++static DevPrivateKey MultibufferScreenPrivKey = &MultibufferScreenPrivKeyIndex;
++static int MultibufferWindowPrivKeyIndex;
++static DevPrivateKey MultibufferWindowPrivKey = &MultibufferWindowPrivKeyIndex;
+
+ static void PerformDisplayRequest (
+ MultibuffersPtr * /* ppMultibuffers */,
+diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
+index 17f587b..22b51aa 100644
+--- a/Xext/panoramiX.c
++++ b/Xext/panoramiX.c
+@@ -107,8 +107,10 @@ #include "panoramiXh.h"
+
+ int (* SavedProcVector[256]) (ClientPtr client) = { NULL, };
+
+-static DevPrivateKey PanoramiXGCKey = &PanoramiXGCKey;
+-static DevPrivateKey PanoramiXScreenKey = &PanoramiXScreenKey;
++static int PanoramiXGCKeyIndex;
++static DevPrivateKey PanoramiXGCKey = &PanoramiXGCKeyIndex;
++static int PanoramiXScreenKeyIndex;
++static DevPrivateKey PanoramiXScreenKey = &PanoramiXScreenKeyIndex;
+
+ typedef struct {
+ DDXPointRec clipOrg;
+diff --git a/Xext/saver.c b/Xext/saver.c
+index d74495b..0bdcb8b 100644
+--- a/Xext/saver.c
++++ b/Xext/saver.c
+@@ -228,7 +228,8 @@ MakeScreenPrivate (
+ ScreenPtr /* pScreen */
+ );
+
+-static DevPrivateKey ScreenPrivateKey = &ScreenPrivateKey;
++static int ScreenPrivateKeyIndex;
++static DevPrivateKey ScreenPrivateKey = &ScreenPrivateKeyIndex;
+
+ #define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr) \
+ dixLookupPrivate(&(s)->devPrivates, ScreenPrivateKey))
+diff --git a/Xext/security.c b/Xext/security.c
+index bd92600..e379063 100644
+--- a/Xext/security.c
++++ b/Xext/security.c
+@@ -50,7 +50,8 @@ static RESTYPE RTEventClient;
+ static CallbackListPtr SecurityValidateGroupCallback = NULL;
+
+ /* Private state record */
+-static DevPrivateKey stateKey = &stateKey;
++static int stateKeyIndex;
++static DevPrivateKey stateKey = &stateKeyIndex;
+
+ /* This is what we store as client security state */
+ typedef struct {
+diff --git a/Xext/shm.c b/Xext/shm.c
+index 312b9d1..a48d2bd 100644
+--- a/Xext/shm.c
++++ b/Xext/shm.c
+@@ -139,7 +139,8 @@ static ShmDescPtr Shmsegs;
+ static Bool sharedPixmaps;
+ static ShmFuncsPtr shmFuncs[MAXSCREENS];
+ static DestroyPixmapProcPtr destroyPixmap[MAXSCREENS];
+-static DevPrivateKey shmPixmapPrivate = &shmPixmapPrivate;
++static int shmPixmapPrivateIndex;
++static DevPrivateKey shmPixmapPrivate = &shmPixmapPrivateIndex;
+ static ShmFuncs miFuncs = {NULL, NULL};
+ static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL};
+
+diff --git a/Xext/xevie.c b/Xext/xevie.c
+index bbbf045..292f207 100644
+--- a/Xext/xevie.c
++++ b/Xext/xevie.c
+@@ -77,9 +77,11 @@ DeviceIntPtr xeviemouse = NULL;
+ Mask xevieMask = 0;
+ int xevieEventSent = 0;
+ int xevieKBEventSent = 0;
+-static DevPrivateKey xevieDevicePrivateKey = &xevieDevicePrivateKey;
+ static Bool xevieModifiersOn = FALSE;
+
++static int xevieDevicePrivateKeyIndex;
++static DevPrivateKey xevieDevicePrivateKey = &xevieDevicePrivateKeyIndex;
++
+ #define XEVIEINFO(dev) ((xevieDeviceInfoPtr) \
+ dixLookupPrivate(&(dev)->devPrivates, xevieDevicePrivateKey))
+
+diff --git a/Xext/xselinux.c b/Xext/xselinux.c
+index a47df03..2a8be0b 100644
+--- a/Xext/xselinux.c
++++ b/Xext/xselinux.c
+@@ -62,9 +62,12 @@ #include "modinit.h"
+ */
+
+ /* private state keys */
+-static DevPrivateKey subjectKey = &subjectKey;
+-static DevPrivateKey objectKey = &objectKey;
+-static DevPrivateKey dataKey = &dataKey;
++static int subjectKeyIndex;
++static DevPrivateKey subjectKey = &subjectKeyIndex;
++static int objectKeyIndex;
++static DevPrivateKey objectKey = &objectKeyIndex;
++static int dataKeyIndex;
++static DevPrivateKey dataKey = &dataKeyIndex;
+
+ /* subject state (clients and devices only) */
+ typedef struct {
+diff --git a/Xext/xvmain.c b/Xext/xvmain.c
+index e92a248..fcca724 100644
+--- a/Xext/xvmain.c
++++ b/Xext/xvmain.c
+@@ -105,7 +105,8 @@ #include "panoramiXsrv.h"
+ #endif
+ #include "xvdisp.h"
+
+-static DevPrivateKey XvScreenKey = &XvScreenKey;
++static int XvScreenKeyIndex;
++static DevPrivateKey XvScreenKey = &XvScreenKeyIndex;
+ unsigned long XvExtensionGeneration = 0;
+ unsigned long XvScreenGeneration = 0;
+ unsigned long XvResourceGeneration = 0;
+diff --git a/Xext/xvmc.c b/Xext/xvmc.c
+index dc1e7dd..ad1b8ab 100644
+--- a/Xext/xvmc.c
++++ b/Xext/xvmc.c
+@@ -34,7 +34,8 @@ #endif /* HAS_XVMCSHM */
+ #define DR_CLIENT_DRIVER_NAME_SIZE 48
+ #define DR_BUSID_SIZE 48
+
+-static DevPrivateKey XvMCScreenKey = NULL;
++static int XvMCScreenKeyIndex;
++static DevPrivateKey XvMCScreenKey;
+
+ unsigned long XvMCGeneration = 0;
+
+@@ -709,7 +710,7 @@ XvMCScreenInit(ScreenPtr pScreen, int nu
+ {
+ XvMCScreenPtr pScreenPriv;
+
+- XvMCScreenKey = &XvMCScreenKey;
++ XvMCScreenKey = &XvMCScreenKeyIndex;
+
+ if(!(pScreenPriv = (XvMCScreenPtr)xalloc(sizeof(XvMCScreenRec))))
+ return BadAlloc;
+#diff --git a/Xi/extinit.c b/Xi/extinit.c
+#index cb1f3a4..d8714ba 100644
+#--- a/Xi/extinit.c
+#+++ b/Xi/extinit.c
+#@@ -352,7 +352,8 @@ Mask PropagateMask[MAX_DEVICES];
+# *
+# */
+#
+#-DevPrivateKey XIClientPrivateKey = &XIClientPrivateKey;
+#+static int XIClientPrivateKeyIndex;
+#+DevPrivateKey XIClientPrivateKey = &XIClientPrivateKeyIndex;
+#
+# static XExtensionVersion thisversion = { XI_Present,
+# XI_2_Major,
+diff --git a/composite/compext.c b/composite/compext.c
+index 154f719..c154402 100644
+--- a/composite/compext.c
++++ b/composite/compext.c
+@@ -51,7 +51,8 @@ #define SERVER_COMPOSITE_MAJOR 0
+ #define SERVER_COMPOSITE_MINOR 4
+
+ static CARD8 CompositeReqCode;
+-static DevPrivateKey CompositeClientPrivateKey = &CompositeClientPrivateKey;
++static int CompositeClientPrivateKeyIndex;
++static DevPrivateKey CompositeClientPrivateKey = &CompositeClientPrivateKeyIndex;
+ RESTYPE CompositeClientWindowType;
+ RESTYPE CompositeClientSubwindowsType;
+ RESTYPE CompositeClientOverlayType;
+diff --git a/composite/compinit.c b/composite/compinit.c
+index 7914a8d..495188e 100644
+--- a/composite/compinit.c
++++ b/composite/compinit.c
+@@ -46,9 +46,12 @@ #endif
+
+ #include "compint.h"
+
+-DevPrivateKey CompScreenPrivateKey = &CompScreenPrivateKey;
+-DevPrivateKey CompWindowPrivateKey = &CompWindowPrivateKey;
+-DevPrivateKey CompSubwindowsPrivateKey = &CompSubwindowsPrivateKey;
++static int CompScreenPrivateKeyIndex;
++DevPrivateKey CompScreenPrivateKey = &CompScreenPrivateKeyIndex;
++static int CompWindowPrivateKeyIndex;
++DevPrivateKey CompWindowPrivateKey = &CompWindowPrivateKeyIndex;
++static int CompSubwindowsPrivateKeyIndex;
++DevPrivateKey CompSubwindowsPrivateKey = &CompSubwindowsPrivateKeyIndex;
+
+
+ static Bool
+diff --git a/damageext/damageext.c b/damageext/damageext.c
+index 7dd328a..4d91580 100755
+--- a/damageext/damageext.c
++++ b/damageext/damageext.c
+@@ -29,10 +29,12 @@ #include "damageextint.h"
+ static unsigned char DamageReqCode;
+ static int DamageEventBase;
+ static int DamageErrorBase;
+-static DevPrivateKey DamageClientPrivateKey = &DamageClientPrivateKey;
+ static RESTYPE DamageExtType;
+ static RESTYPE DamageExtWinType;
+
++static int DamageClientPrivateKeyIndex;
++static DevPrivateKey DamageClientPrivateKey = &DamageClientPrivateKeyIndex;
++
+ /* Version of the damage extension supported by the server, as opposed to the
+ * DAMAGE_* defines from damageproto for what version the proto header
+ * supports.
+diff --git a/dbe/dbe.c b/dbe/dbe.c
+index d34708d..1a08bda 100644
+--- a/dbe/dbe.c
++++ b/dbe/dbe.c
+@@ -62,8 +62,10 @@ #include "xace.h"
+ static Bool (* DbeInitFunct[MAXSCREENS])(); /* pScreen, pDbeScreenPriv */
+
+ /* These are static globals copied to DBE's screen private for use by DDX */
+-static DevPrivateKey dbeScreenPrivKey = &dbeScreenPrivKey;
+-static DevPrivateKey dbeWindowPrivKey = &dbeWindowPrivKey;
++static int dbeScreenPrivKeyIndex;
++static DevPrivateKey dbeScreenPrivKey = &dbeScreenPrivKeyIndex;
++static int dbeWindowPrivKeyIndex;
++static DevPrivateKey dbeWindowPrivKey = &dbeWindowPrivKeyIndex;
+
+ /* These are static globals copied to DBE's screen private for use by DDX */
+ static RESTYPE dbeDrawableResType;
+diff --git a/dbe/midbe.c b/dbe/midbe.c
+index c02e591..f8a3acc 100644
+--- a/dbe/midbe.c
++++ b/dbe/midbe.c
+@@ -60,11 +60,14 @@ #include "xace.h"
+
+ #include <stdio.h>
+
+-static DevPrivateKey miDbeWindowPrivPrivKey = &miDbeWindowPrivPrivKey;
++static int miDbeWindowPrivPrivKeyIndex;
++static DevPrivateKey miDbeWindowPrivPrivKey = &miDbeWindowPrivPrivKeyIndex;
+ static RESTYPE dbeDrawableResType;
+ static RESTYPE dbeWindowPrivResType;
+-static DevPrivateKey dbeScreenPrivKey = &dbeScreenPrivKey;
+-static DevPrivateKey dbeWindowPrivKey = &dbeWindowPrivKey;
++static int dbeScreenPrivKeyIndex;
++static DevPrivateKey dbeScreenPrivKey = &dbeScreenPrivKeyIndex;
++static int dbeWindowPrivKeyIndex;
++static DevPrivateKey dbeWindowPrivKey = &dbeWindowPrivKeyIndex;
+
+
+ /******************************************************************************
+diff --git a/dix/devices.c b/dix/devices.c
+index 2225e08..7e1ce35 100644
+--- a/dix/devices.c
++++ b/dix/devices.c
+@@ -91,7 +91,8 @@ #include "xiproperty.h"
+ * This file handles input device-related stuff.
+ */
+
+-DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKey;
++static int CoreDevicePrivateKeyIndex;
++DevPrivateKey CoreDevicePrivateKey = &CoreDevicePrivateKeyIndex;
+
+ /**
+ * Create a new input device and init it to sane values. The device is added
+diff --git a/dix/events.c b/dix/events.c
+index 7a79d29..2947ff1 100644
+#--- a/dix/events.c
+#+++ b/dix/events.c
+#@@ -1504,7 +1504,8 @@ CheckGrabForSyncs(DeviceIntPtr thisDev,
+# }
+#
+# /* Only ever used if a grab is called on an attached slave device. */
+#-static DevPrivateKey GrabPrivateKey = &GrabPrivateKey;
+#+static int GrabPrivateKeyIndex;
+#+static DevPrivateKey GrabPrivateKey = &GrabPrivateKeyIndex;
+# typedef struct _GrabMemoryRec {
+# DeviceIntPtr oldmaster;
+# } GrabMemoryRec, *GrabMemoryPtr;
+#diff --git a/dix/window.c b/dix/window.c
+#index 9bcf546..b588f44 100644
+#--- a/dix/window.c
+#+++ b/dix/window.c
+#@@ -154,7 +154,8 @@ _X_EXPORT int screenIsSaved = SCREEN_SAV
+#
+# _X_EXPORT ScreenSaverStuffRec savedScreenInfo[MAXSCREENS];
+#
+#-_X_EXPORT DevPrivateKey FocusPrivatesKey = &FocusPrivatesKey;
+#+static int FocusPrivatesKeyIndex;
+#+_X_EXPORT DevPrivateKey FocusPrivatesKey = &FocusPrivatesKeyIndex;
+#
+# static Bool TileScreenSaver(int i, int kind);
+
+diff --git a/exa/exa.c b/exa/exa.c
+index 12c1549..677e2d5 100644
+--- a/exa/exa.c
++++ b/exa/exa.c
+@@ -38,8 +38,10 @@ #include "exa_priv.h"
+ #include "exa.h"
+ #include "cw.h"
+
+-DevPrivateKey exaScreenPrivateKey = &exaScreenPrivateKey;
+-DevPrivateKey exaPixmapPrivateKey = &exaPixmapPrivateKey;
++static int exaScreenPrivateKeyIndex;
++DevPrivateKey exaScreenPrivateKey = &exaScreenPrivateKeyIndex;
++static int exaPixmapPrivateKeyIndex;
++DevPrivateKey exaPixmapPrivateKey = &exaPixmapPrivateKeyIndex;
+
+ static _X_INLINE void*
+ ExaGetPixmapAddress(PixmapPtr p)
+diff --git a/fb/fballpriv.c b/fb/fballpriv.c
+index 2e77289..c40796c 100644
+--- a/fb/fballpriv.c
++++ b/fb/fballpriv.c
+@@ -27,19 +27,24 @@ #endif
+ #include "fb.h"
+
+ #ifdef FB_SCREEN_PRIVATE
+-static DevPrivateKey fbScreenPrivateKey = &fbScreenPrivateKey;
++static int fbScreenPrivateKeyIndex;
++static DevPrivateKey fbScreenPrivateKey = &fbScreenPrivateKeyIndex;
+ DevPrivateKey fbGetScreenPrivateKey(void)
+ {
+ return fbScreenPrivateKey;
+ }
+ #endif
+-static DevPrivateKey fbGCPrivateKey = &fbGCPrivateKey;
++
++static int fbGCPrivateKeyIndex;
++static DevPrivateKey fbGCPrivateKey = &fbGCPrivateKeyIndex;
+ DevPrivateKey fbGetGCPrivateKey(void)
+ {
+ return fbGCPrivateKey;
+ }
++
+ #ifndef FB_NO_WINDOW_PIXMAPS
+-static DevPrivateKey fbWinPrivateKey = &fbWinPrivateKey;
++static int fbWinPrivateKeyIndex;
++static DevPrivateKey fbWinPrivateKey = &fbWinPrivateKeyIndex;
+ DevPrivateKey fbGetWinPrivateKey(void)
+ {
+ return fbWinPrivateKey;
+diff --git a/fb/fboverlay.c b/fb/fboverlay.c
+index f9f7c52..1432cb6 100644
+--- a/fb/fboverlay.c
++++ b/fb/fboverlay.c
+@@ -33,7 +33,8 @@ #include "fb.h"
+ #include "fboverlay.h"
+ #include "shmint.h"
+
+-static DevPrivateKey fbOverlayScreenPrivateKey = &fbOverlayScreenPrivateKey;
++static int fbOverlayScreenPrivateKeyIndex;
++static DevPrivateKey fbOverlayScreenPrivateKey = &fbOverlayScreenPrivateKeyIndex;
+
+ DevPrivateKey fbOverlayGetScreenPrivateKey(void)
+ {
+diff --git a/glx/glxext.c b/glx/glxext.c
+index 6ba404f..c2171a8 100644
+--- a/glx/glxext.c
++++ b/glx/glxext.c
+@@ -54,7 +54,8 @@ RESTYPE __glXSwapBarrierRes;
+ */
+ xGLXSingleReply __glXReply;
+
+-static DevPrivateKey glxClientPrivateKey = &glxClientPrivateKey;
++static int glxClientPrivateKeyIndex;
++static DevPrivateKey glxClientPrivateKey = &glxClientPrivateKeyIndex;
+
+ /*
+ ** Client that called into GLX dispatch.
+diff --git a/glx/glxscreens.c b/glx/glxscreens.c
+index 505f797..d928bdf 100644
+--- a/glx/glxscreens.c
++++ b/glx/glxscreens.c
+@@ -48,7 +48,8 @@ #include "glxserver.h"
+ #include "glxutil.h"
+ #include "glxext.h"
+
+-static DevPrivateKey glxScreenPrivateKey = &glxScreenPrivateKey;
++static int glxScreenPrivateKeyIndex;
++static DevPrivateKey glxScreenPrivateKey = &glxScreenPrivateKeyIndex;
+
+ const char GLServerVersion[] = "1.4";
+ static const char GLServerExtensions[] =
+diff --git a/hw/dmx/dmxscrinit.c b/hw/dmx/dmxscrinit.c
+index 0e49e96..7360750 100644
+--- a/hw/dmx/dmxscrinit.c
++++ b/hw/dmx/dmxscrinit.c
+@@ -67,15 +67,22 @@ static Bool dmxSaveScreen(ScreenPtr pScr
+ static unsigned long dmxGeneration;
+ static unsigned long *dmxCursorGeneration;
+
++static int dmxGCPrivateKeyIndex;
+ DevPrivateKey dmxGCPrivateKey = &dmxGCPrivateKey; /**< Private index for GCs */
+-DevPrivateKey dmxWinPrivateKey = &dmxWinPrivateKey; /**< Private index for Windows */
+-DevPrivateKey dmxPixPrivateKey = &dmxPixPrivateKey; /**< Private index for Pixmaps */
++static int dmxWinPrivateKeyIndex;
++DevPrivateKey dmxWinPrivateKey = &dmxWinPrivateKeyIndex; /**< Private index for Windows */
++static int dmxPixPrivateKeyIndex;
++DevPrivateKey dmxPixPrivateKey = &dmxPixPrivateKeyIndex; /**< Private index for Pixmaps */
+ int dmxFontPrivateIndex; /**< Private index for Fonts */
+-DevPrivateKey dmxScreenPrivateKey = &dmxScreenPrivateKey; /**< Private index for Screens */
+-DevPrivateKey dmxColormapPrivateKey = &dmxColormapPrivateKey; /**< Private index for Colormaps */
++static int dmxScreenPrivateKeyIndex;
++DevPrivateKey dmxScreenPrivateKey = &dmxScreenPrivateKeyIndex; /**< Private index for Screens */
++static int dmxColormapPrivateKeyIndex;
++DevPrivateKey dmxColormapPrivateKey = &dmxColormapPrivateKeyIndex; /**< Private index for Colormaps */
+ #ifdef RENDER
+-DevPrivateKey dmxPictPrivateKey = &dmxPictPrivateKey; /**< Private index for Picts */
+-DevPrivateKey dmxGlyphSetPrivateKey = &dmxGlyphSetPrivateKey; /**< Private index for GlyphSets */
++static int dmxPictPrivateKeyIndex;
++DevPrivateKey dmxPictPrivateKey = &dmxPictPrivateKeyIndex; /**< Private index for Picts */
++static int dmxGlyphSetPrivateKeyIndex;
++DevPrivateKey dmxGlyphSetPrivateKey = &dmxGlyphSetPrivateKeyIndex; /**< Private index for GlyphSets */
+ #endif
+
+ /** Initialize the parts of screen \a idx that require access to the
+diff --git a/hw/kdrive/ephyr/ephyrdriext.c b/hw/kdrive/ephyr/ephyrdriext.c
+index 05cecf4..a906ad1 100644
+--- a/hw/kdrive/ephyr/ephyrdriext.c
++++ b/hw/kdrive/ephyr/ephyrdriext.c
+@@ -111,8 +111,10 @@ static Bool findWindowPairFromLocal (Win
+
+ static unsigned char DRIReqCode = 0;
+
+-static DevPrivateKey ephyrDRIWindowKey = &ephyrDRIWindowKey;
+-static DevPrivateKey ephyrDRIScreenKey = &ephyrDRIScreenKey;
++static int ephyrDRIWindowKeyIndex;
++static DevPrivateKey ephyrDRIWindowKey = &ephyrDRIWindowKeyIndex;
++static int ephyrDRIScreenKeyIndex;
++static DevPrivateKey ephyrDRIScreenKey = &ephyrDRIScreenKeyIndex;
+
+ #define GET_EPHYR_DRI_WINDOW_PRIV(win) ((EphyrDRIWindowPrivPtr) \
+ dixLookupPrivate(&(win)->devPrivates, ephyrDRIWindowKey))
+diff --git a/hw/kdrive/src/kdrive.c b/hw/kdrive/src/kdrive.c
+index 9e27840..1478a94 100644
+--- a/hw/kdrive/src/kdrive.c
++++ b/hw/kdrive/src/kdrive.c
+@@ -67,7 +67,8 @@ #define NUM_KD_DEPTHS (sizeof (kdDepths)
+
+ #define KD_DEFAULT_BUTTONS 5
+
+-DevPrivateKey kdScreenPrivateKey = &kdScreenPrivateKey;
++static int kdScreenPrivateKeyIndex;
++DevPrivateKey kdScreenPrivateKey = &kdScreenPrivateKeyIndex;
+ unsigned long kdGeneration;
+
+ Bool kdVideoTest;
+diff --git a/hw/kdrive/src/kxv.c b/hw/kdrive/src/kxv.c
+index 83ca393..9a74654 100644
+--- a/hw/kdrive/src/kxv.c
++++ b/hw/kdrive/src/kxv.c
+@@ -103,9 +103,10 @@ static void KdXVClipNotify(WindowPtr pWi
+ /* misc */
+ static Bool KdXVInitAdaptors(ScreenPtr, KdVideoAdaptorPtr*, int);
+
+-
+-DevPrivateKey KdXVWindowKey = &KdXVWindowKey;
+-DevPrivateKey KdXvScreenKey = &KdXvScreenKey;
++static int KdXVWindowKeyIndex;
++DevPrivateKey KdXVWindowKey = &KdXVWindowKeyIndex;
++static int KdXvScreenKeyIndex;
++DevPrivateKey KdXvScreenKey = &KdXvScreenKeyIndex;
+ static unsigned long KdXVGeneration = 0;
+ static unsigned long PortResource = 0;
+
+diff --git a/hw/xfree86/common/xf86DGA.c b/hw/xfree86/common/xf86DGA.c
+index a7e24a6..4dd31d8 100644
+--- a/hw/xfree86/common/xf86DGA.c
++++ b/hw/xfree86/common/xf86DGA.c
+@@ -50,7 +50,8 @@ #include "exglobals.h"
+
+ #include "mi.h"
+
+-static DevPrivateKey DGAScreenKey = NULL;
++static int DGAScreenKeyIndex;
++static DevPrivateKey DGAScreenKey;
+ static int mieq_installed = 0;
+
+ static Bool DGACloseScreen(int i, ScreenPtr pScreen);
+@@ -116,7 +117,7 @@ DGAInit(
+ if(!modes || num <= 0)
+ return FALSE;
+
+- DGAScreenKey = &DGAScreenKey;
++ DGAScreenKey = &DGAScreenKeyIndex;
+
+ if(!(pScreenPriv = (DGAScreenPtr)xalloc(sizeof(DGAScreenRec))))
+ return FALSE;
+diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c
+index 4fb901a..5ee5e24 100644
+--- a/hw/xfree86/common/xf86DPMS.c
++++ b/hw/xfree86/common/xf86DPMS.c
+@@ -47,7 +47,8 @@ #endif
+
+
+ #ifdef DPMSExtension
+-static DevPrivateKey DPMSKey = NULL;
++static int DPMSKeyIndex;
++static DevPrivateKey DPMSKey;
+ static Bool DPMSClose(int i, ScreenPtr pScreen);
+ static int DPMSCount = 0;
+ #endif
+@@ -62,7 +63,7 @@ #ifdef DPMSExtension
+ pointer DPMSOpt;
+ MessageType enabled_from = X_INFO;
+
+- DPMSKey = &DPMSKey;
++ DPMSKey = &DPMSKeyIndex;
+
+ if (DPMSDisabledSwitch)
+ DPMSEnabled = FALSE;
+diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c
+index 2362629..dffe988 100644
+--- a/hw/xfree86/common/xf86Globals.c
++++ b/hw/xfree86/common/xf86Globals.c
+@@ -47,10 +47,13 @@ #include "xf86InPriv.h"
+ /* Globals that video drivers may access */
+
+ /* Index into pScreen.devPrivates */
+-DevPrivateKey xf86CreateRootWindowKey = &xf86CreateRootWindowKey;
++static int xf86CreateRootWindowKeyIndex;
++DevPrivateKey xf86CreateRootWindowKey = &xf86CreateRootWindowKeyIndex;
+ /* Index of ScrnInfo in pScreen.devPrivates */
+-_X_EXPORT DevPrivateKey xf86ScreenKey = &xf86ScreenKey;
+-_X_EXPORT DevPrivateKey xf86PixmapKey = &xf86PixmapKey;
++static int xf86ScreenKeyIndex;
++_X_EXPORT DevPrivateKey xf86ScreenKey = &xf86ScreenKeyIndex;
++static int xf86PixmapKeyIndex;
++_X_EXPORT DevPrivateKey xf86PixmapKey = &xf86PixmapKeyIndex;
+ _X_EXPORT ScrnInfoPtr *xf86Screens = NULL; /* List of ScrnInfos */
+ _X_EXPORT const unsigned char byte_reversed[256] =
+ {
+diff --git a/hw/xfree86/common/xf86RAC.c b/hw/xfree86/common/xf86RAC.c
+index 8215f98..24d29e4 100644
+--- a/hw/xfree86/rac/xf86RAC.c
++++ b/hw/xfree86/rac/xf86RAC.c
+@@ -256,8 +256,10 @@ static miPointerSpriteFuncRec RACSpriteF
+ RACSpriteMoveCursor
+ };
+
+-static DevPrivateKey RACScreenKey = &RACScreenKey;
+-static DevPrivateKey RACGCKey = &RACGCKey;
++static int RACScreenKeyIndex;
++static DevPrivateKey RACScreenKey = &RACScreenKeyIndex;
++static int RACGCKeyIndex;
++static DevPrivateKey RACGCKey = &RACGCKeyIndex;
+
+
+ Bool
+diff --git a/hw/xfree86/common/xf86RandR.c b/hw/xfree86/common/xf86RandR.c
+index 10ec370..8471914 100644
+--- a/hw/xfree86/common/xf86RandR.c
++++ b/hw/xfree86/common/xf86RandR.c
+@@ -46,7 +46,8 @@ typedef struct _xf86RandRInfo {
+ Rotation rotation;
+ } XF86RandRInfoRec, *XF86RandRInfoPtr;
+
+-static DevPrivateKey xf86RandRKey = NULL;
++static int xf86RandRKeyIndex;
++static DevPrivateKey xf86RandRKey;
+
+ #define XF86RANDRINFO(p) ((XF86RandRInfoPtr)dixLookupPrivate(&(p)->devPrivates, xf86RandRKey))
+
+@@ -423,7 +424,7 @@ #ifdef PANORAMIX
+ return TRUE;
+ #endif
+
+- xf86RandRKey = &xf86RandRKey;
++ xf86RandRKey = &xf86RandRKeyIndex;
+
+ randrp = xalloc (sizeof (XF86RandRInfoRec));
+ if (!randrp)
+diff --git a/hw/xfree86/common/xf86VidMode.c b/hw/xfree86/common/xf86VidMode.c
+index 9260bb5..24fccd3 100644
+--- a/hw/xfree86/common/xf86VidMode.c
++++ b/hw/xfree86/common/xf86VidMode.c
+@@ -47,7 +47,8 @@ #ifdef XF86VIDMODE
+ #include "vidmodeproc.h"
+ #include "xf86cmap.h"
+
+-static DevPrivateKey VidModeKey = NULL;
++static int VidModeKeyIndex;
++static DevPrivateKey VidModeKey;
+ static int VidModeCount = 0;
+ static Bool VidModeClose(int i, ScreenPtr pScreen);
+
+@@ -72,7 +73,7 @@ #ifdef XF86VIDMODE
+ return FALSE;
+ }
+
+- VidModeKey = &VidModeKey;
++ VidModeKey = &VidModeKeyIndex;
+
+ if (!dixSetPrivate(&pScreen->devPrivates, VidModeKey,
+ xcalloc(sizeof(VidModeRec), 1))) {
+diff --git a/hw/xfree86/common/xf86cmap.c b/hw/xfree86/common/xf86cmap.c
+index 8ae193a..e578447 100644
+--- a/hw/xfree86/common/xf86cmap.c
++++ b/hw/xfree86/common/xf86cmap.c
+@@ -101,8 +101,10 @@ typedef struct {
+ int overscan;
+ } CMapColormapRec, *CMapColormapPtr;
+
+-static DevPrivateKey CMapScreenKey = NULL;
+-static DevPrivateKey CMapColormapKey = &CMapColormapKey;
++static int CMapScreenKeyIndex;
++static DevPrivateKey CMapScreenKey;
++static int CMapColormapKeyIndex;
++static DevPrivateKey CMapColormapKey = &CMapColormapKeyIndex;
+
+ static void CMapInstallColormap(ColormapPtr);
+ static void CMapStoreColors(ColormapPtr, int, xColorItem *);
+@@ -142,7 +144,7 @@ _X_EXPORT Bool xf86HandleColormaps(
+ if(!maxColors || !sigRGBbits || !loadPalette)
+ return FALSE;
+
+- CMapScreenKey = &CMapScreenKey;
++ CMapScreenKey = &CMapScreenKeyIndex;
+
+ elements = 1 << sigRGBbits;
+
+diff --git a/hw/xfree86/common/xf86fbman.c b/hw/xfree86/common/xf86fbman.c
+index 9fd2e6c..5471c58 100644
+--- a/hw/xfree86/common/xf86fbman.c
++++ b/hw/xfree86/common/xf86fbman.c
+@@ -42,14 +42,15 @@ #include "xf86fbman.h"
+ #define DEBUG
+ */
+
+-static DevPrivateKey xf86FBManagerKey = NULL;
++static int xf86FBManagerKeyIndex;
++static DevPrivateKey xf86FBManagerKey;
+
+ _X_EXPORT Bool xf86RegisterOffscreenManager(
+ ScreenPtr pScreen,
+ FBManagerFuncsPtr funcs
+ ){
+
+- xf86FBManagerKey = &xf86FBManagerKey;
++ xf86FBManagerKey = &xf86FBManagerKeyIndex;
+ dixSetPrivate(&pScreen->devPrivates, xf86FBManagerKey, funcs);
+
+ return TRUE;
+@@ -269,7 +270,8 @@ xf86PurgeUnlockedOffscreenAreas(ScreenPt
+
+ \************************************************************/
+
+-static DevPrivateKey xf86FBScreenKey = &xf86FBScreenKey;
++static int xf86FBScreenKeyIndex;
++static DevPrivateKey xf86FBScreenKey = &xf86FBScreenKeyIndex;
+
+ typedef struct _FBLink {
+ FBArea area;
+diff --git a/hw/xfree86/common/xf86sbusBus.c b/hw/xfree86/common/xf86sbusBus.c
+index 63d1cb3..af2b145 100644
+--- a/hw/xfree86/common/xf86sbusBus.c
++++ b/hw/xfree86/common/xf86sbusBus.c
+@@ -602,7 +602,8 @@ xf86SbusUseBuiltinMode(ScrnInfoPtr pScrn
+ pScrn->virtualY = psdp->height;
+ }
+
+-static DevPrivateKey sbusPaletteKey = &sbusPaletteKey;
++static sbusPaletteKeyIndex;
++static DevPrivateKey sbusPaletteKey = &sbusPaletteKeyIndex;
+ typedef struct _sbusCmap {
+ sbusDevicePtr psdp;
+ CloseScreenProcPtr CloseScreen;
+diff --git a/hw/xfree86/common/xf86xv.c b/hw/xfree86/common/xf86xv.c
+index 7483e20..b263f9b 100644
+--- a/hw/xfree86/common/xf86xv.c
++++ b/hw/xfree86/common/xf86xv.c
+@@ -110,8 +110,10 @@ static void xf86XVAdjustFrame(int index,
+ static Bool xf86XVInitAdaptors(ScreenPtr, XF86VideoAdaptorPtr*, int);
+
+
+-static DevPrivateKey XF86XVWindowKey = &XF86XVWindowKey;
+-DevPrivateKey XF86XvScreenKey;
++static int XF86XVWindowKeyIndex;
++static DevPrivateKey XF86XVWindowKey = &XF86XVWindowKeyIndex;
++static int XF86XvScreenKeyIndex;
++DevPrivateKey XF86XvScreenKey = &XF86XvScreenKeyIndex;
+ static unsigned long PortResource = 0;
+
+ DevPrivateKey (*XvGetScreenKeyProc)(void) = NULL;
+diff --git a/hw/xfree86/common/xf86xvmc.c b/hw/xfree86/common/xf86xvmc.c
+index 05267a2..41ef0a0 100644
+--- a/hw/xfree86/common/xf86xvmc.c
++++ b/hw/xfree86/common/xf86xvmc.c
+@@ -56,7 +56,8 @@ typedef struct {
+ XvMCAdaptorPtr dixinfo;
+ } xf86XvMCScreenRec, *xf86XvMCScreenPtr;
+
+-static DevPrivateKey XF86XvMCScreenKey = &XF86XvMCScreenKey;
++static int XF86XvMCScreenKeyIndex;
++static DevPrivateKey XF86XvMCScreenKey = &XF86XvMCScreenKeyIndex;
+
+ #define XF86XVMC_GET_PRIVATE(pScreen) (xf86XvMCScreenPtr) \
+ dixLookupPrivate(&(pScreen)->devPrivates, XF86XvMCScreenKey)
+diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c
+index 295e05e..c12178f 100644
+--- a/hw/xfree86/dixmods/extmod/xf86dga2.c
++++ b/hw/xfree86/dixmods/extmod/xf86dga2.c
+@@ -62,7 +62,8 @@ unsigned char DGAReqCode = 0;
+ int DGAErrorBase;
+ int DGAEventBase;
+
+-static DevPrivateKey DGAClientPrivateKey = &DGAClientPrivateKey;
++static int DGAClientPrivateKeyIndex;
++static DevPrivateKey DGAClientPrivateKey = &DGAClientPrivateKeyIndex;
+ static int DGACallbackRefCount = 0;
+
+ /* This holds the client's version information */
+diff --git a/hw/xfree86/dixmods/extmod/xf86vmode.c b/hw/xfree86/dixmods/extmod/xf86vmode.c
+index 559f18b..6485a04 100644
+--- a/hw/xfree86/dixmods/extmod/xf86vmode.c
++++ b/hw/xfree86/dixmods/extmod/xf86vmode.c
+@@ -53,7 +53,8 @@ #include "globals.h"
+ #define DEFAULT_XF86VIDMODE_VERBOSITY 3
+
+ static int VidModeErrorBase;
+-static DevPrivateKey VidModeClientPrivateKey = &VidModeClientPrivateKey;
++static int VidModeClientPrivateKeyIndex;
++static DevPrivateKey VidModeClientPrivateKey = &VidModeClientPrivateKeyIndex;
+
+ /* This holds the client's version information */
+ typedef struct {
+@@ -141,8 +142,9 @@ typedef struct _XF86VidModeScreenPrivate
+ XF86VidModeEventPtr events;
+ Bool hasWindow;
+ } XF86VidModeScreenPrivateRec, *XF86VidModeScreenPrivatePtr;
+-
+-static DevPrivateKey ScreenPrivateKey = &ScreenPrivateKey;
++
++static int ScreenPrivateKeyIndex;
++static DevPrivateKey ScreenPrivateKey = &ScreenPrivateKeyIndex;
+
+ #define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr) \
+ dixLookupPrivate(&(s)->devPrivates, ScreenPrivateKey))
+diff --git a/hw/xfree86/dri/dri.c b/hw/xfree86/dri/dri.c
+index ac40e0f..d2599a9 100644
+--- a/hw/xfree86/dri/dri.c
++++ b/hw/xfree86/dri/dri.c
+@@ -79,8 +79,10 @@ extern Bool noPanoramiXExtension;
+ #endif
+
+ static int DRIEntPrivIndex = -1;
+-static DevPrivateKey DRIScreenPrivKey = &DRIScreenPrivKey;
+-static DevPrivateKey DRIWindowPrivKey = &DRIWindowPrivKey;
++static int DRIScreenPrivKeyIndex;
++static DevPrivateKey DRIScreenPrivKey = &DRIScreenPrivKeyIndex;
++static int DRIWindowPrivKeyIndex;
++static DevPrivateKey DRIWindowPrivKey = &DRIWindowPrivKeyIndex;
+ static unsigned long DRIGeneration = 0;
+ static unsigned int DRIDrawableValidationStamp = 0;
+
+@@ -343,7 +345,6 @@ DRIScreenInit(ScreenPtr pScreen, DRIInfo
+
+ pDRIEntPriv = DRI_ENT_PRIV(pScrn);
+
+- DRIScreenPrivKey = &DRIScreenPrivKey;
+ if (DRIGeneration != serverGeneration)
+ DRIGeneration = serverGeneration;
+
+diff --git a/hw/xfree86/dri2/dri2.c b/hw/xfree86/dri2/dri2.c
+index 74aef71..a5aef91 100644
+--- a/hw/xfree86/dri2/dri2.c
++++ b/hw/xfree86/dri2/dri2.c
+@@ -45,9 +45,12 @@ #include <GL/internal/dri_sarea.h>
+
+ #include "xf86.h"
+
+-static DevPrivateKey dri2ScreenPrivateKey = &dri2ScreenPrivateKey;
+-static DevPrivateKey dri2WindowPrivateKey = &dri2WindowPrivateKey;
+-static DevPrivateKey dri2PixmapPrivateKey = &dri2PixmapPrivateKey;
++static int dri2ScreenPrivateKeyIndex;
++static DevPrivateKey dri2ScreenPrivateKey = &dri2ScreenPrivateKeyIndex;
++static int dri2WindowPrivateKeyIndex;
++static DevPrivateKey dri2WindowPrivateKey = &dri2WindowPrivateKeyIndex;
++static int dri2PixmapPrivateKeyIndex;
++static DevPrivateKey dri2PixmapPrivateKey = &dri2PixmapPrivateKeyIndex;
+
+ typedef struct _DRI2DrawablePriv {
+ unsigned int refCount;
+diff --git a/hw/xfree86/exa/examodule.c b/hw/xfree86/exa/examodule.c
+index 4a8d8f2..601288c 100644
+--- a/hw/xfree86/exa/examodule.c
++++ b/hw/xfree86/exa/examodule.c
+@@ -42,7 +42,8 @@ typedef struct _ExaXorgScreenPrivRec {
+ OptionInfoPtr options;
+ } ExaXorgScreenPrivRec, *ExaXorgScreenPrivPtr;
+
+-static DevPrivateKey exaXorgScreenPrivateKey = &exaXorgScreenPrivateKey;
++static int exaXorgScreenPrivateKeyIndex;
++static DevPrivateKey exaXorgScreenPrivateKey = &exaXorgScreenPrivateKeyIndex;
+
+ typedef enum {
+ EXAOPT_MIGRATION_HEURISTIC,
+diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c
+index ac0b438..2ae8ea7 100644
+--- a/hw/xfree86/modes/xf86RandR12.c
++++ b/hw/xfree86/modes/xf86RandR12.c
+@@ -63,7 +63,9 @@ #endif
+ #endif
+
+ static int xf86RandR12Generation;
++
++static int xf86RandR12KeyIndex;
+ static DevPrivateKey xf86RandR12Key;
+
+ #define XF86RANDRINFO(p) ((XF86RandRInfoPtr) \
+ dixLookupPrivate(&(p)->devPrivates, xf86RandR12Key))
+@@ -499,6 +500,6 @@ #endif
+ xf86RandR12Generation = serverGeneration;
+
+- xf86RandR12Key = &xf86RandR12Key;
++ xf86RandR12Key = &xf86RandR12KeyIndex;
+
+ randrp = xalloc (sizeof (XF86RandRInfoRec));
+ if (!randrp)
+diff --git a/hw/xfree86/ramdac/xf86Cursor.c b/hw/xfree86/ramdac/xf86Cursor.c
+index be4fb90..592eaad 100644
+--- a/hw/xfree86/ramdac/xf86Cursor.c
++++ b/hw/xfree86/ramdac/xf86Cursor.c
+@@ -18,7 +18,8 @@ #include "cursorstr.h"
+ #include "inputstr.h"
+ extern InputInfo inputInfo;
+
+-DevPrivateKey xf86CursorScreenKey = &xf86CursorScreenKey;
++static int xf86CursorScreenKeyIndex;
++DevPrivateKey xf86CursorScreenKey = &xf86CursorScreenKeyIndex;
+
+ /* sprite functions */
+
+diff --git a/hw/xfree86/shadowfb/shadow.c b/hw/xfree86/shadowfb/shadow.c
+index 74beefb..ff775ef 100644
+--- a/hw/xfree86/shadowfb/shadow.c
++++ b/hw/xfree86/shadowfb/shadow.c
+@@ -94,8 +94,10 @@ typedef struct {
+ } ShadowGCRec, *ShadowGCPtr;
+
+
+-static DevPrivateKey ShadowScreenKey = &ShadowScreenKey;
+-static DevPrivateKey ShadowGCKey = &ShadowGCKey;
++static int ShadowScreenKeyIndex;
++static DevPrivateKey ShadowScreenKey = &ShadowScreenKeyIndex;
++static int ShadowGCKeyIndex;
++static DevPrivateKey ShadowGCKey = &ShadowGCKeyIndex;
+
+ #define GET_SCREEN_PRIVATE(pScreen) \
+ (ShadowScreenPtr)dixLookupPrivate(&(pScreen)->devPrivates, ShadowScreenKey)
+diff --git a/hw/xfree86/xaa/xaaInit.c b/hw/xfree86/xaa/xaaInit.c
+index 22a35a0..deb1989 100644
+--- a/hw/xfree86/xaa/xaaInit.c
++++ b/hw/xfree86/xaa/xaaInit.c
+@@ -39,9 +39,12 @@ static int XAASetDGAMode(int index, int
+ static void XAAEnableDisableFBAccess (int index, Bool enable);
+ static Bool XAAChangeWindowAttributes (WindowPtr pWin, unsigned long mask);
+
+-static DevPrivateKey XAAScreenKey = &XAAScreenKey;
+-static DevPrivateKey XAAGCKey = &XAAGCKey;
+-static DevPrivateKey XAAPixmapKey = &XAAPixmapKey;
++static int XAAScreenKeyIndex;
++static DevPrivateKey XAAScreenKey = &XAAScreenKeyIndex;
++static int XAAGCKeyIndex;
++static DevPrivateKey XAAGCKey = &XAAGCKeyIndex;
++static int XAAPixmapKeyIndex;
++static DevPrivateKey XAAPixmapKey = &XAAPixmapKeyIndex;
+
+ DevPrivateKey XAAGetScreenKey(void) {
+ return XAAScreenKey;
+diff --git a/hw/xfree86/xaa/xaaOverlayDF.c b/hw/xfree86/xaa/xaaOverlayDF.c
+index 64ca998..8db816e 100644
+--- a/hw/xfree86/xaa/xaaOverlayDF.c
++++ b/hw/xfree86/xaa/xaaOverlayDF.c
+@@ -151,7 +151,8 @@ typedef struct {
+ int (*TiledFillChooser)(GCPtr);
+ } XAAOverlayRec, *XAAOverlayPtr;
+
+-static DevPrivateKey XAAOverlayKey = &XAAOverlayKey;
++static int XAAOverlayKeyIndex;
++static DevPrivateKey XAAOverlayKey = &XAAOverlayKeyIndex;
+
+ #define GET_OVERLAY_PRIV(pScreen) \
+ (XAAOverlayPtr)dixLookupPrivate(&(pScreen)->devPrivates, XAAOverlayKey)
+diff --git a/hw/xfree86/xaa/xaaStateChange.c b/hw/xfree86/xaa/xaaStateChange.c
+index 443bda6..57d8aa3 100644
+--- a/hw/xfree86/xaa/xaaStateChange.c
++++ b/hw/xfree86/xaa/xaaStateChange.c
+@@ -274,7 +274,8 @@ #ifdef RENDER
+ #endif
+ } XAAStateWrapRec, *XAAStateWrapPtr;
+
+-static DevPrivateKey XAAStateKey = &XAAStateKey;
++static int XAAStateKeyIndex;
++static DevPrivateKey XAAStateKey = &XAAStateKeyIndex;
+
+ /* Wrap functions start here */
+ #define GET_STATEPRIV_GC(pGC) XAAStateWrapPtr pStatePriv =\
+diff --git a/hw/xfree86/xaa/xaaWrapper.c b/hw/xfree86/xaa/xaaWrapper.c
+index 5d6ea05..8841894 100644
+--- a/hw/xfree86/xaa/xaaWrapper.c
++++ b/hw/xfree86/xaa/xaaWrapper.c
+@@ -129,8 +129,10 @@ #define xaaWrapperGetGCPriv(pGC) ((xaaWr
+ #define xaaWrapperGCPriv(pGC) xaaWrapperGCPrivPtr pGCPriv = xaaWrapperGetGCPriv(pGC)
+
+
+-static DevPrivateKey xaaWrapperScrPrivateKey = &xaaWrapperScrPrivateKey;
+-static DevPrivateKey xaaWrapperGCPrivateKey = &xaaWrapperGCPrivateKey;
++static int xaaWrapperScrPrivateKeyIndex;
++static DevPrivateKey xaaWrapperScrPrivateKey = &xaaWrapperScrPrivateKeyIndex;
++static int xaaWrapperGCPrivateKeyIndex;
++static DevPrivateKey xaaWrapperGCPrivateKey = &xaaWrapperGCPrivateKeyIndex;
+
+ static Bool
+ xaaWrapperCreateScreenResources(ScreenPtr pScreen)
+diff --git a/hw/xnest/GC.c b/hw/xnest/GC.c
+index 06e6e02..65425e9 100644
+--- a/hw/xnest/GC.c
++++ b/hw/xnest/GC.c
+@@ -35,7 +35,8 @@ #include "Drawable.h"
+ #include "XNFont.h"
+ #include "Color.h"
+
+-DevPrivateKey xnestGCPrivateKey = &xnestGCPrivateKey;
++static int xnestGCPrivateKeyIndex;
++DevPrivateKey xnestGCPrivateKey = &xnestGCPrivateKeyIndex;
+
+ static GCFuncs xnestFuncs = {
+ xnestValidateGC,
+diff --git a/hw/xnest/Pixmap.c b/hw/xnest/Pixmap.c
+index 0431196..08305b1 100644
+--- a/hw/xnest/Pixmap.c
++++ b/hw/xnest/Pixmap.c
+@@ -33,7 +33,8 @@ #include "Display.h"
+ #include "Screen.h"
+ #include "XNPixmap.h"
+
+-DevPrivateKey xnestPixmapPrivateKey = &xnestPixmapPrivateKey;
++static int xnestPixmapPrivateKeyIndex;
++DevPrivateKey xnestPixmapPrivateKey = &xnestPixmapPrivateKeyIndex;
+
+ PixmapPtr
+ xnestCreatePixmap(ScreenPtr pScreen, int width, int height, int depth,
+#diff --git a/hw/xnest/Screen.c b/hw/xnest/Screen.c
+#index 4e8616d..ca903d7 100644
+#--- a/hw/xnest/Screen.c
+#+++ b/hw/xnest/Screen.c
+#@@ -45,7 +45,8 @@ #include "mipointrst.h"
+#
+# Window xnestDefaultWindows[MAXSCREENS];
+# Window xnestScreenSaverWindows[MAXSCREENS];
+#-DevPrivateKey xnestCursorScreenKey = &xnestCursorScreenKey;
+#+static int xnestCursorScreenKeyIndex;
+#+DevPrivateKey xnestCursorScreenKey = &xnestCursorScreenKeyIndex;
+#
+# ScreenPtr
+# xnestScreen(Window window)
+diff --git a/hw/xnest/Window.c b/hw/xnest/Window.c
+index 23383e1..ae3487f 100644
+--- a/hw/xnest/Window.c
++++ b/hw/xnest/Window.c
+@@ -39,7 +39,8 @@ #include "Visual.h"
+ #include "Events.h"
+ #include "Args.h"
+
+-DevPrivateKey xnestWindowPrivateKey = &xnestWindowPrivateKey;
++static int xnestWindowPrivateKeyIndex;
++DevPrivateKey xnestWindowPrivateKey = &xnestWindowPrivateKeyIndex;
+
+ static int
+ xnestFindWindowMatch(WindowPtr pWin, pointer ptr)
+diff --git a/hw/xquartz/darwin.c b/hw/xquartz/darwin.c
+index 8107beb..559bc89 100644
+--- a/hw/xquartz/darwin.c
++++ b/hw/xquartz/darwin.c
+@@ -85,7 +85,8 @@ #endif
+ * X server shared global variables
+ */
+ int darwinScreensFound = 0;
+-DevPrivateKey darwinScreenKey = &darwinScreenKey;
++static int darwinScreenKeyIndex;
++DevPrivateKey darwinScreenKey = &darwinScreenKeyIndex;
+ io_connect_t darwinParamConnect = 0;
+ int darwinEventReadFD = -1;
+ int darwinEventWriteFD = -1;
+diff --git a/hw/xquartz/quartz.c b/hw/xquartz/quartz.c
+index c4b889e..b17e561 100644
+--- a/hw/xquartz/quartz.c
++++ b/hw/xquartz/quartz.c
+@@ -71,7 +71,8 @@ int quartzUseAGL = 1
+ int quartzEnableKeyEquivalents = 1;
+ int quartzServerVisible = TRUE;
+ int quartzServerQuitting = FALSE;
+-DevPrivateKey quartzScreenKey = &quartzScreenKey;
++static int quartzScreenKeyIndex;
++DevPrivateKey quartzScreenKey = &quartzScreenKeyIndex;
+ int aquaMenuBarHeight = 0;
+ QuartzModeProcsPtr quartzProcs = NULL;
+ const char *quartzOpenGLBundle = NULL;
+diff --git a/hw/xquartz/xpr/dri.c b/hw/xquartz/xpr/dri.c
+index 3aacb19..5b79419 100644
+--- a/hw/xquartz/xpr/dri.c
++++ b/hw/xquartz/xpr/dri.c
+@@ -71,9 +71,12 @@ #include "x-hook.h"
+
+ #include <AvailabilityMacros.h>
+
+-static DevPrivateKey DRIScreenPrivKey = &DRIScreenPrivKey;
+-static DevPrivateKey DRIWindowPrivKey = &DRIWindowPrivKey;
+-static DevPrivateKey DRIPixmapPrivKey = &DRIPixmapPrivKey;
++static int DRIScreenPrivKeyIndex;
++static DevPrivateKey DRIScreenPrivKey = &DRIScreenPrivKeyIndex;
++static int DRIWindowPrivKeyIndex;
++static DevPrivateKey DRIWindowPrivKey = &DRIWindowPrivKeyIndex;
++static int DRIPixmapPrivKeyIndex;
++static DevPrivateKey DRIPixmapPrivKey = &DRIPixmapPrivKeyIndex;
+
+ static RESTYPE DRIDrawablePrivResType;
+
+diff --git a/hw/xquartz/xpr/xprCursor.c b/hw/xquartz/xpr/xprCursor.c
+index 76ab75c..c1890a2 100644
+--- a/hw/xquartz/xpr/xprCursor.c
++++ b/hw/xquartz/xpr/xprCursor.c
+@@ -56,7 +56,8 @@ typedef struct {
+ miPointerSpriteFuncPtr spriteFuncs;
+ } QuartzCursorScreenRec, *QuartzCursorScreenPtr;
+
+-static DevPrivateKey darwinCursorScreenKey = &darwinCursorScreenKey;
++static int darwinCursorScreenKeyIndex;
++static DevPrivateKey darwinCursorScreenKey = &darwinCursorScreenKeyIndex;
+
+ #define CURSOR_PRIV(pScreen) ((QuartzCursorScreenPtr) \
+ dixLookupPrivate(&pScreen->devPrivates, darwinCursorScreenKey))
+diff --git a/hw/xwin/winglobals.c b/hw/xwin/winglobals.c
+index fddada3..3eb6091 100644
+--- a/hw/xwin/winglobals.c
++++ b/hw/xwin/winglobals.c
+@@ -44,11 +44,16 @@ int g_iLastScreen = -1;
+ #ifdef HAS_DEVWINDOWS
+ int g_fdMessageQueue = WIN_FD_INVALID;
+ #endif
+-DevPrivateKey g_iScreenPrivateKey = &g_iScreenPrivateKey;
+-DevPrivateKey g_iCmapPrivateKey = &g_iCmapPrivateKey;
+-DevPrivateKey g_iGCPrivateKey = &g_iGCPrivateKey;
+-DevPrivateKey g_iPixmapPrivateKey = &g_iPixmapPrivateKey;
+-DevPrivateKey g_iWindowPrivateKey = &g_iWindowPrivateKey;
++static int g_iScreenPrivateKeyIndex;
++DevPrivateKey g_iScreenPrivateKey = &g_iScreenPrivateKeyIndex;
++static int g_iCmapPrivateKeyIndex;
++DevPrivateKey g_iCmapPrivateKey = &g_iCmapPrivateKeyIndex;
++static int g_iGCPrivateKeyIndex;
++DevPrivateKey g_iGCPrivateKey = &g_iGCPrivateKeyIndex;
++static int g_iPixmapPrivateKeyIndex;
++DevPrivateKey g_iPixmapPrivateKey = &g_iPixmapPrivateKeyIndex;
++static int g_iWindowPrivateKeyIndex;
++DevPrivateKey g_iWindowPrivateKey = &g_iWindowPrivateKeyIndex;
+ unsigned long g_ulServerGeneration = 0;
+ Bool g_fInitializedDefaultScreens = FALSE;
+ DWORD g_dwEnginesSupported = 0;
+diff --git a/mi/mibank.c b/mi/mibank.c
+index ea79e9d..92288ab 100644
+--- a/mi/mibank.c
++++ b/mi/mibank.c
+@@ -175,8 +175,11 @@ #define SET_DESTINATION_BANK(_pPix, _wid
+ #define xalloc_ARRAY(atype, ntype) \
+ (atype *)xalloc((ntype) * sizeof(atype))
+
+-static DevPrivateKey miBankScreenKey = &miBankScreenKey;
+-static DevPrivateKey miBankGCKey = &miBankGCKey;
++static int miBankScreenKeyIndex;
++static DevPrivateKey miBankScreenKey = &miBankScreenKeyIndex;
++static int miBankGCKeyIndex;
++static DevPrivateKey miBankGCKey = &miBankGCKeyIndex;
++
+ static unsigned long miBankGeneration = 0;
+
+ #define BANK_SCRPRIVLVAL dixLookupPrivate(&pScreen->devPrivates, miBankScreenKey)
+diff --git a/mi/midispcur.c b/mi/midispcur.c
+index 1f2d8cf..05352fc 100644
+--- a/mi/midispcur.c
++++ b/mi/midispcur.c
+@@ -55,8 +55,8 @@ #endif
+ # include "inputstr.h" /* for MAX_DEVICES */
+
+ /* per-screen private data */
+-
+-static DevPrivateKey miDCScreenKey = &miDCScreenKey;
++static int miDCScreenKeyIndex;
++static DevPrivateKey miDCScreenKey = &miDCScreenKeyIndex;
+
+ static Bool miDCCloseScreen(int index, ScreenPtr pScreen);
+
+#-static DevPrivateKey miPointerPrivKey = &miPointerPrivKey;
+#+static int miPointerPrivKeyIndex;
+#+static DevPrivateKey miPointerPrivKey = &miPointerPrivKeyIndex;
+#
+# #define MIPOINTER(dev) \
+# ((DevHasCursor((dev)) || (!dev->isMaster && !dev->u.master)) ? \
+
+diff --git a/mi/mioverlay.c b/mi/mioverlay.c
+index 2fc583e..395b1aa 100644
+--- a/mi/mioverlay.c
++++ b/mi/mioverlay.c
+@@ -54,8 +54,10 @@ typedef struct {
+ Bool copyUnderlay;
+ } miOverlayScreenRec, *miOverlayScreenPtr;
+
+-static DevPrivateKey miOverlayWindowKey = &miOverlayWindowKey;
+-static DevPrivateKey miOverlayScreenKey = &miOverlayScreenKey;
++static int miOverlayWindowKeyKeyIndex;
++static DevPrivateKey miOverlayWindowKey = &miOverlayWindowKeyKeyIndex;
++static int miOverlayScreenKeyIndex;
++static DevPrivateKey miOverlayScreenKey = &miOverlayScreenKeyIndex;
+
+ static void RebuildTree(WindowPtr);
+ static Bool HasUnderlayChildren(WindowPtr);
+diff --git a/mi/mipointer.c b/mi/mipointer.c
+index 809ce5e..8293e9b 100644
+--- a/mi/mipointer.c
++++ b/mi/mipointer.c
+@@ -41,9 +41,10 @@ # include "cursorstr.h"
+ # include "dixstruct.h"
+ # include "inputstr.h"
+
+-_X_EXPORT DevPrivateKey miPointerScreenKey = &miPointerScreenKey;
++static int miPointerScreenKeyIndex;
++_X_EXPORT DevPrivateKey miPointerScreenKey = &miPointerScreenKeyIndex;
+
+ #define GetScreenPrivate(s) ((miPointerScreenPtr) \
+ dixLookupPrivate(&(s)->devPrivates, miPointerScreenKey))
+ #define SetupScreen(s) miPointerScreenPtr pScreenPriv = GetScreenPrivate(s)
+
+#-static DevPrivateKey miPointerPrivKey = &miPointerPrivKey;
+#+static int miPointerPrivKeyIndex;
+#+static DevPrivateKey miPointerPrivKey = &miPointerPrivKeyIndex;
+#
+# #define MIPOINTER(dev) \
+# ((DevHasCursor((dev)) || (!dev->isMaster && !dev->u.master)) ? \
+#
+diff --git a/mi/miscrinit.c b/mi/miscrinit.c
+index 6cd4df3..df96993 100644
+--- a/mi/miscrinit.c
++++ b/mi/miscrinit.c
+@@ -280,7 +280,8 @@ #endif
+ return miScreenDevPrivateInit(pScreen, width, pbits);
+ }
+
+-static DevPrivateKey privateKey = &privateKey;
++static int privateKeyIndex;
++static DevPrivateKey privateKey = &privateKeyIndex;
+
+ _X_EXPORT DevPrivateKey
+ miAllocateGCPrivateIndex()
+@@ -288,7 +289,8 @@ miAllocateGCPrivateIndex()
+ return privateKey;
+ }
+
+-_X_EXPORT DevPrivateKey miZeroLineScreenKey = &miZeroLineScreenKey;
++static int miZeroLineScreenKeyIndex;
++_X_EXPORT DevPrivateKey miZeroLineScreenKey = &miZeroLineScreenKeyIndex;
+
+ _X_EXPORT void
+ miSetZeroLineBias(ScreenPtr pScreen, unsigned int bias)
+diff --git a/mi/misprite.c b/mi/misprite.c
+index 85755b7..692e6c9 100644
+--- a/mi/misprite.c
++++ b/mi/misprite.c
+@@ -109,7 +109,8 @@ miSpriteIsDown(miCursorInfoPtr pDevCurso
+ * screen wrappers
+ */
+
+-static DevPrivateKey miSpriteScreenKey = &miSpriteScreenKey;
++static int miSpriteScreenKeyIndex;
++static DevPrivateKey miSpriteScreenKey = &miSpriteScreenKeyIndex;
+
+ static Bool miSpriteCloseScreen(int i, ScreenPtr pScreen);
+ static void miSpriteGetImage(DrawablePtr pDrawable, int sx, int sy,
+diff --git a/miext/cw/cw.c b/miext/cw/cw.c
+index efb0469..56066fe 100644
+--- a/miext/cw/cw.c
++++ b/miext/cw/cw.c
+@@ -43,11 +43,15 @@ #else
+ #define CW_ASSERT(x) do {} while (0)
+ #endif
+
+-DevPrivateKey cwGCKey = &cwGCKey;
+-DevPrivateKey cwScreenKey = &cwScreenKey;
+-DevPrivateKey cwWindowKey = &cwWindowKey;
++static int cwGCKeyIndex;
++DevPrivateKey cwGCKey = &cwGCKeyIndex;
++static int cwScreenKeyIndex;
++DevPrivateKey cwScreenKey = &cwScreenKeyIndex;
++static int cwWindowKeyIndex;
++DevPrivateKey cwWindowKey = &cwWindowKeyIndex;
+ #ifdef RENDER
+-DevPrivateKey cwPictureKey = &cwPictureKey;
++static int cwPictureKeyIndex;
++DevPrivateKey cwPictureKey = &cwPictureKeyIndex;
+ #endif
+ extern GCOps cwGCOps;
+
+diff --git a/miext/damage/damage.c b/miext/damage/damage.c
+index 56864c5..5000a82 100755
+--- a/miext/damage/damage.c
++++ b/miext/damage/damage.c
+@@ -70,10 +70,14 @@ #define getPixmapDamageRef(pPixmap) ((Da
+
+ #define pixmapDamage(pPixmap) damagePixPriv(pPixmap)
+
+-static DevPrivateKey damageScrPrivateKey = &damageScrPrivateKey;
+-static DevPrivateKey damagePixPrivateKey = &damagePixPrivateKey;
+-static DevPrivateKey damageGCPrivateKey = &damageGCPrivateKey;
+-static DevPrivateKey damageWinPrivateKey = &damageWinPrivateKey;
++static int damageScrPrivateKeyIndex;
++static DevPrivateKey damageScrPrivateKey = &damageScrPrivateKeyIndex;
++static int damagePixPrivateKeyIndex;
++static DevPrivateKey damagePixPrivateKey = &damagePixPrivateKeyIndex;
++static int damageGCPrivateKeyIndex;
++static DevPrivateKey damageGCPrivateKey = &damageGCPrivateKeyIndex;
++static int damageWinPrivateKeyIndex;
++static DevPrivateKey damageWinPrivateKey = &damageWinPrivateKeyIndex;
+
+ static DamagePtr *
+ getDrawableDamageRef (DrawablePtr pDrawable)
+diff --git a/miext/rootless/rootlessScreen.c b/miext/rootless/rootlessScreen.c
+index 8eaacca..421c03c 100644
+--- a/miext/rootless/rootlessScreen.c
++++ b/miext/rootless/rootlessScreen.c
+@@ -62,10 +62,14 @@ extern int RootlessMiValidateTree(Window
+ extern Bool RootlessCreateGC(GCPtr pGC);
+
+ // Initialize globals
+-DevPrivateKey rootlessGCPrivateKey = &rootlessGCPrivateKey;
+-DevPrivateKey rootlessScreenPrivateKey = &rootlessScreenPrivateKey;
+-DevPrivateKey rootlessWindowPrivateKey = &rootlessWindowPrivateKey;
+-DevPrivateKey rootlessWindowOldPixmapPrivateKey = &rootlessWindowOldPixmapPrivateKey;
++static int rootlessGCPrivateKeyIndex;
++DevPrivateKey rootlessGCPrivateKey = &rootlessGCPrivateKeyIndex;
++static int rootlessScreenPrivateKeyIndex;
++DevPrivateKey rootlessScreenPrivateKey = &rootlessScreenPrivateKeyIndex;
++static int rootlessWindowPrivateKeyIndex;
++DevPrivateKey rootlessWindowPrivateKey = &rootlessWindowPrivateKeyIndex;
++static int rootlessWindowOldPixmapPrivateKeyIndex;
++DevPrivateKey rootlessWindowOldPixmapPrivateKey = &rootlessWindowOldPixmapPrivateKeyIndex;
+
+
+ /*
+diff --git a/miext/shadow/shadow.c b/miext/shadow/shadow.c
+index ef0df40..21f1de2 100644
+--- a/miext/shadow/shadow.c
++++ b/miext/shadow/shadow.c
+@@ -36,7 +36,8 @@ #include "globals.h"
+ #include "gcstruct.h"
+ #include "shadow.h"
+
+-DevPrivateKey shadowScrPrivateKey = &shadowScrPrivateKey;
++static int shadowScrPrivateKeyIndex;
++DevPrivateKey shadowScrPrivateKey = &shadowScrPrivateKeyIndex;
+
+ #define wrap(priv, real, mem) {\
+ priv->mem = real->mem; \
+diff --git a/randr/randr.c b/randr/randr.c
+index 9bfed05..230d816 100644
+--- a/randr/randr.c
++++ b/randr/randr.c
+@@ -56,9 +56,11 @@ static int SProcRRDispatch (ClientPtr pC
+ int RREventBase;
+ int RRErrorBase;
+ RESTYPE RRClientType, RREventType; /* resource types for event masks */
+-DevPrivateKey RRClientPrivateKey = &RRClientPrivateKey;
++static int RRClientPrivateKeyIndex;
++DevPrivateKey RRClientPrivateKey = &RRClientPrivateKeyIndex;
+
+-DevPrivateKey rrPrivKey = &rrPrivKey;
++static int rrPrivKeyIndex;
++DevPrivateKey rrPrivKey = &rrPrivKeyIndex;
+
+ static void
+ RRClientCallback (CallbackListPtr *list,
+diff --git a/record/record.c b/record/record.c
+index d7314b1..d6a1c98 100644
+--- a/record/record.c
++++ b/record/record.c
+@@ -165,7 +165,8 @@ typedef struct {
+ ProcFunctionPtr recordVector[256];
+ } RecordClientPrivateRec, *RecordClientPrivatePtr;
+
+-static DevPrivateKey RecordClientPrivateKey = &RecordClientPrivateKey;
++static int RecordClientPrivateKeyIndex;
++static DevPrivateKey RecordClientPrivateKey = &RecordClientPrivateKeyIndex;
+
+ /* RecordClientPrivatePtr RecordClientPrivate(ClientPtr)
+ * gets the client private of the given client. Syntactic sugar.
+diff --git a/render/animcur.c b/render/animcur.c
+index 362607f..5723442 100644
+--- a/render/animcur.c
++++ b/render/animcur.c
+@@ -91,7 +91,9 @@ static CursorBits animCursorBits = {
+ };
+
+ static int AnimCurGeneration;
+-static DevPrivateKey AnimCurScreenPrivateKey = &AnimCurScreenPrivateKey;
++
++static int AnimCurScreenPrivateKeyIndex;
++static DevPrivateKey AnimCurScreenPrivateKey = &AnimCurScreenPrivateKeyIndex;
+
+ #define IsAnimCur(c) ((c) && ((c)->bits == &animCursorBits))
+ #define GetAnimCur(c) ((AnimCurPtr) ((c) + 1))
+diff --git a/render/picture.c b/render/picture.c
+index b7874bb..9def47b 100644
+--- a/render/picture.c
++++ b/render/picture.c
+@@ -43,8 +43,10 @@ #include "picturestr.h"
+ #include "xace.h"
+ #include "registry.h"
+
+-_X_EXPORT DevPrivateKey PictureScreenPrivateKey = &PictureScreenPrivateKey;
+-DevPrivateKey PictureWindowPrivateKey = &PictureWindowPrivateKey;
++static int PictureScreenPrivateKeyIndex;
++_X_EXPORT DevPrivateKey PictureScreenPrivateKey = &PictureScreenPrivateKeyIndex;
++static int PictureWindowPrivateKeyIndex;
++DevPrivateKey PictureWindowPrivateKey = &PictureWindowPrivateKeyIndex;
+ static int PictureGeneration;
+ RESTYPE PictureType;
+ RESTYPE PictFormatType;
+diff --git a/render/render.c b/render/render.c
+index b1d6d58..1b7d78b 100644
+--- a/render/render.c
++++ b/render/render.c
+@@ -211,7 +211,8 @@ int (*SProcRenderVector[RenderNumberRequ
+ };
+
+ int RenderErrBase;
+-DevPrivateKey RenderClientPrivateKey;
++static int RenderClientPrivateKeyIndex;
++DevPrivateKey RenderClientPrivateKey = &RenderClientPrivateKeyIndex;
+
+ typedef struct _RenderClient {
+ int major_version;
+diff --git a/xfixes/cursor.c b/xfixes/cursor.c
+index ca17397..c4069d9 100755
+--- a/xfixes/cursor.c
++++ b/xfixes/cursor.c
+@@ -56,10 +56,12 @@ #include "xace.h"
+ static RESTYPE CursorClientType;
+ static RESTYPE CursorHideCountType;
+ static RESTYPE CursorWindowType;
+-static DevPrivateKey CursorScreenPrivateKey = &CursorScreenPrivateKey;
+ static CursorPtr CursorCurrent;
+ static CursorPtr pInvisibleCursor = NULL;
+
++static int CursorScreenPrivateKeyIndex;
++static DevPrivateKey CursorScreenPrivateKey = &CursorScreenPrivateKeyIndex;
++
+ static void deleteCursorHideCountsForScreen (ScreenPtr pScreen);
+
+ #define VERIFY_CURSOR(pCursor, cursor, client, access) { \
+diff --git a/xfixes/xfixes.c b/xfixes/xfixes.c
+index 0db4989..d1225c6 100755
+--- a/xfixes/xfixes.c
++++ b/xfixes/xfixes.c
+@@ -56,7 +56,9 @@ #define SERVER_XFIXES_MINOR 0
+ static unsigned char XFixesReqCode;
+ int XFixesEventBase;
+ int XFixesErrorBase;
+-static DevPrivateKey XFixesClientPrivateKey = &XFixesClientPrivateKey;
++
++static int XFixesClientPrivateKeyIndex;
++static DevPrivateKey XFixesClientPrivateKey = &XFixesClientPrivateKeyIndex;
+
+ static int
+ ProcXFixesQueryVersion(ClientPtr client)
+diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c
+index 8a26825..35938a9 100644
+--- a/xkb/xkbActions.c
++++ b/xkb/xkbActions.c
+@@ -42,7 +42,8 @@ #include "xkb.h"
+ #include <ctype.h>
+ #define EXTENSION_EVENT_BASE 64
+
+-DevPrivateKey xkbDevicePrivateKey = &xkbDevicePrivateKey;
++static int xkbDevicePrivateKeyIndex;
++DevPrivateKey xkbDevicePrivateKey = &xkbDevicePrivateKeyIndex;
+
+ void
+ xkbUnwrapProc(DeviceIntPtr device, DeviceHandleProc proc,
+--
+1.4.1
+