diff options
Diffstat (limited to 'hw/xfree86/dixmods/extmod/xf86dga2.c')
-rw-r--r-- | hw/xfree86/dixmods/extmod/xf86dga2.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/hw/xfree86/dixmods/extmod/xf86dga2.c b/hw/xfree86/dixmods/extmod/xf86dga2.c index 906f4d5fc..203fccf16 100644 --- a/hw/xfree86/dixmods/extmod/xf86dga2.c +++ b/hw/xfree86/dixmods/extmod/xf86dga2.c @@ -61,10 +61,11 @@ unsigned char DGAReqCode = 0; int DGAErrorBase; int DGAEventBase; -static int DGAScreenPrivateKeyIndex; -static DevPrivateKey DGAScreenPrivateKey = &DGAScreenPrivateKeyIndex; -static int DGAClientPrivateKeyIndex; -static DevPrivateKey DGAClientPrivateKey = &DGAClientPrivateKeyIndex; +static DevPrivateKeyRec DGAScreenPrivateKeyRec; +#define DGAScreenPrivateKey (&DGAScreenPrivateKeyRec) +#define DGAScreenPrivateKeyRegistered (DGAScreenPrivateKeyRec.initialized) +static DevPrivateKeyRec DGAClientPrivateKeyRec; +#define DGAClientPrivateKey (&DGAClientPrivateKeyRec) static int DGACallbackRefCount = 0; /* This holds the client's version information */ @@ -89,6 +90,12 @@ XFree86DGAExtensionInit(INITARGS) { ExtensionEntry* extEntry; + if (!dixRegisterPrivateKey(&DGAClientPrivateKeyRec, PRIVATE_CLIENT, 0)) + return; + + if (!dixRegisterPrivateKey(&DGAScreenPrivateKeyRec, PRIVATE_SCREEN, 0)) + return; + if ((extEntry = AddExtension(XF86DGANAME, XF86DGANumberEvents, XF86DGANumberErrors, @@ -717,13 +724,13 @@ ProcXF86DGADirectVideo(ClientPtr client) if (stuff->screen > screenInfo.numScreens) return BadValue; - owner = DGA_GETCLIENT(stuff->screen); - REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq); if (!DGAAvailable(stuff->screen)) return DGAErrorBase + XF86DGANoDirectVideoMode; + owner = DGA_GETCLIENT(stuff->screen); + if (owner && owner != client) return DGAErrorBase + XF86DGANoDirectVideoMode; |