diff options
author | Keith Packard <keithp@keithp.com> | 2010-04-26 17:22:21 -0700 |
---|---|---|
committer | Keith Packard <keithp@keithp.com> | 2010-06-05 19:23:03 -0700 |
commit | faeebead7bfcc78535757ca7acc1faf7554c03b7 (patch) | |
tree | 1a8f13a3b1ae968011efb9679bc3ed79a29020be /Xext | |
parent | c865a24401f06bcf1347d8b41f736a066ab25693 (diff) |
Change the devPrivates API to require dixRegisterPrivateKey
This patch only changes the API, not the implementation of the
devPrivates infrastructure. This will permit a new devPrivates
implementation to be layed into the server without requiring
simultaneous changes in every devPrivates user.
Signed-off-by: Keith Packard <keithp@keithp.com>
Tested-by: Tiago Vignatti <tiago.vignatti@nokia.com>
Diffstat (limited to 'Xext')
-rw-r--r-- | Xext/geext.c | 6 | ||||
-rw-r--r-- | Xext/geint.h | 3 | ||||
-rw-r--r-- | Xext/panoramiX.c | 23 | ||||
-rw-r--r-- | Xext/saver.c | 7 | ||||
-rw-r--r-- | Xext/security.c | 6 | ||||
-rw-r--r-- | Xext/shm.c | 29 | ||||
-rw-r--r-- | Xext/xselinux_hooks.c | 15 | ||||
-rw-r--r-- | Xext/xselinuxint.h | 9 | ||||
-rw-r--r-- | Xext/xtest.c | 7 | ||||
-rw-r--r-- | Xext/xvmain.c | 11 | ||||
-rw-r--r-- | Xext/xvmc.c | 14 |
11 files changed, 82 insertions, 48 deletions
diff --git a/Xext/geext.c b/Xext/geext.c index b7f32c079..e61989caa 100644 --- a/Xext/geext.c +++ b/Xext/geext.c @@ -36,12 +36,10 @@ #define rClient(obj) (clients[CLIENT_ID((obj)->resource)]) -static int GEClientPrivateKeyIndex; -DevPrivateKey GEClientPrivateKey = &GEClientPrivateKeyIndex; +DevPrivateKeyRec GEClientPrivateKeyRec; int RT_GECLIENT = 0; - GEExtension GEExtensions[MAXEXTENSIONS]; /* Major available requests */ @@ -209,7 +207,7 @@ GEExtensionInit(void) { ExtensionEntry *extEntry; - if (!dixRequestPrivate(GEClientPrivateKey, sizeof(GEClientInfoRec))) + if (!dixRegisterPrivateKey(&GEClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(GEClientInfoRec))) FatalError("GEExtensionInit: GE private request failed.\n"); if(!AddCallback(&ClientStateCallback, GEClientCallback, 0)) diff --git a/Xext/geint.h b/Xext/geint.h index 10a33cea3..3e2b8e187 100644 --- a/Xext/geint.h +++ b/Xext/geint.h @@ -37,7 +37,8 @@ #include "extnsionst.h" #include <X11/extensions/geproto.h> -extern _X_EXPORT DevPrivateKey GEClientPrivateKey; +extern _X_EXPORT DevPrivateKeyRec GEClientPrivateKeyRec; +#define GEClientPrivateKey (&GEClientPrivateKeyRec) typedef struct _GEClientInfo { CARD32 major_version; diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c index c6254387e..1cb58b59f 100644 --- a/Xext/panoramiX.c +++ b/Xext/panoramiX.c @@ -103,10 +103,10 @@ static void PanoramiXResetProc(ExtensionEntry*); int (* SavedProcVector[256]) (ClientPtr client) = { NULL, }; -static int PanoramiXGCKeyIndex; -static DevPrivateKey PanoramiXGCKey = &PanoramiXGCKeyIndex; -static int PanoramiXScreenKeyIndex; -static DevPrivateKey PanoramiXScreenKey = &PanoramiXScreenKeyIndex; +static DevPrivateKeyRec PanoramiXGCKeyRec; +#define PanoramiXGCKey (&PanoramiXGCKeyRec) +static DevPrivateKeyRec PanoramiXScreenKeyRec; +#define PanoramiXScreenKey (&PanoramiXScreenKeyRec) typedef struct { DDXPointRec clipOrg; @@ -443,6 +443,16 @@ void PanoramiXExtensionInit(int argc, char *argv[]) if (noPanoramiXExtension) return; + if (!dixRegisterPrivateKey(&PanoramiXScreenKeyRec, PRIVATE_SCREEN, 0)) { + noPanoramiXExtension = TRUE; + return; + } + + if (!dixRegisterPrivateKey(&PanoramiXGCKeyRec, PRIVATE_GC, sizeof(PanoramiXGCRec))) { + noPanoramiXExtension = TRUE; + return; + } + PanoramiXNumScreens = screenInfo.numScreens; if (PanoramiXNumScreens == 1) { /* Only 1 screen */ noPanoramiXExtension = TRUE; @@ -462,11 +472,6 @@ void PanoramiXExtensionInit(int argc, char *argv[]) * run in non-PanoramiXeen mode. */ - if (!dixRequestPrivate(PanoramiXGCKey, sizeof(PanoramiXGCRec))) { - noPanoramiXExtension = TRUE; - return; - } - for (i = 0; i < PanoramiXNumScreens; i++) { pScreen = screenInfo.screens[i]; pScreenPriv = malloc(sizeof(PanoramiXScreenRec)); diff --git a/Xext/saver.c b/Xext/saver.c index 696c4aa22..6d91ddf5e 100644 --- a/Xext/saver.c +++ b/Xext/saver.c @@ -226,8 +226,8 @@ MakeScreenPrivate ( ScreenPtr /* pScreen */ ); -static int ScreenPrivateKeyIndex; -static DevPrivateKey ScreenPrivateKey = &ScreenPrivateKeyIndex; +static DevPrivateKeyRec ScreenPrivateKeyRec; +#define ScreenPrivateKey (&ScreenPrivateKeyRec) #define GetScreenPrivate(s) ((ScreenSaverScreenPrivatePtr) \ dixLookupPrivate(&(s)->devPrivates, ScreenPrivateKey)) @@ -252,6 +252,9 @@ ScreenSaverExtensionInit(INITARGS) int i; ScreenPtr pScreen; + if (!dixRegisterPrivateKey(&ScreenPrivateKeyRec, PRIVATE_SCREEN, 0)) + return; + AttrType = CreateNewResourceType(ScreenSaverFreeAttr, "SaverAttr"); SaverEventType = CreateNewResourceType(ScreenSaverFreeEvents, "SaverEvent"); diff --git a/Xext/security.c b/Xext/security.c index e58ba10f8..12210f8bc 100644 --- a/Xext/security.c +++ b/Xext/security.c @@ -51,8 +51,8 @@ static RESTYPE RTEventClient; static CallbackListPtr SecurityValidateGroupCallback = NULL; /* Private state record */ -static int stateKeyIndex; -static DevPrivateKey stateKey = &stateKeyIndex; +static DevPrivateKeyRec stateKeyRec; +#define stateKey (&stateKeyRec) /* This is what we store as client security state */ typedef struct { @@ -1108,7 +1108,7 @@ SecurityExtensionInit(INITARGS) RTEventClient |= RC_NEVERRETAIN; /* Allocate the private storage */ - if (!dixRequestPrivate(stateKey, sizeof(SecurityStateRec))) + if (!dixRegisterPrivateKey(stateKey, PRIVATE_CLIENT, sizeof(SecurityStateRec))) FatalError("SecurityExtensionSetup: Can't allocate client private.\n"); /* Register callbacks */ diff --git a/Xext/shm.c b/Xext/shm.c index 322709c17..dfd8723e3 100644 --- a/Xext/shm.c +++ b/Xext/shm.c @@ -141,10 +141,10 @@ int BadShmSegCode; RESTYPE ShmSegType; static ShmDescPtr Shmsegs; static Bool sharedPixmaps; -static int shmScrPrivateKeyIndex; -static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex; -static int shmPixmapPrivateIndex; -static DevPrivateKey shmPixmapPrivate = &shmPixmapPrivateIndex; +static DevPrivateKeyRec shmScrPrivateKeyRec; +#define shmScrPrivateKey (&shmScrPrivateKeyRec) +static DevPrivateKeyRec shmPixmapPrivateKeyRec; +#define shmPixmapPrivateKey (&shmPixmapPrivateKeyRec) static ShmFuncs miFuncs = {NULL, NULL}; static ShmFuncs fbFuncs = {fbShmCreatePixmap, NULL}; @@ -244,6 +244,16 @@ ShmInitScreenPriv(ScreenPtr pScreen) return screen_priv; } +static Bool +ShmRegisterPrivates(void) +{ + if (!dixRegisterPrivateKey(&shmScrPrivateKeyRec, PRIVATE_SCREEN, 0)) + return FALSE; + if (!dixRegisterPrivateKey(&shmPixmapPrivateKeyRec, PRIVATE_PIXMAP, 0)) + return FALSE; + return TRUE; +} + void ShmExtensionInit(INITARGS) { @@ -258,6 +268,9 @@ ShmExtensionInit(INITARGS) } #endif + if (!ShmRegisterPrivates()) + return; + sharedPixmaps = xFalse; { sharedPixmaps = xTrue; @@ -303,6 +316,8 @@ ShmResetProc(ExtensionEntry *extEntry) void ShmRegisterFuncs(ScreenPtr pScreen, ShmFuncsPtr funcs) { + if (!ShmRegisterPrivates()) + return; ShmInitScreenPriv(pScreen)->shmFuncs = funcs; } @@ -316,7 +331,7 @@ ShmDestroyPixmap (PixmapPtr pPixmap) { ShmDescPtr shmdesc; shmdesc = (ShmDescPtr)dixLookupPrivate(&pPixmap->devPrivates, - shmPixmapPrivate); + shmPixmapPrivateKey); if (shmdesc) ShmDetachSegment ((pointer) shmdesc, pPixmap->drawable.id); } @@ -817,7 +832,7 @@ CreatePmap: shmdesc->addr + stuff->offset); if (pMap) { - dixSetPrivate(&pMap->devPrivates, shmPixmapPrivate, shmdesc); + dixSetPrivate(&pMap->devPrivates, shmPixmapPrivateKey, shmdesc); shmdesc->refcnt++; pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER; pMap->drawable.id = newPix->info[j].id; @@ -1156,7 +1171,7 @@ CreatePmap: pDraw->pScreen->DestroyPixmap(pMap); return rc; } - dixSetPrivate(&pMap->devPrivates, shmPixmapPrivate, shmdesc); + dixSetPrivate(&pMap->devPrivates, shmPixmapPrivateKey, shmdesc); shmdesc->refcnt++; pMap->drawable.serialNumber = NEXT_SERIAL_NUMBER; pMap->drawable.id = stuff->pid; diff --git a/Xext/xselinux_hooks.c b/Xext/xselinux_hooks.c index 13e5243c2..560e1e9bf 100644 --- a/Xext/xselinux_hooks.c +++ b/Xext/xselinux_hooks.c @@ -59,12 +59,9 @@ typedef struct { } SELinuxAuditRec; /* private state keys */ -static int subjectKeyIndex; -DevPrivateKey subjectKey = &subjectKeyIndex; -static int objectKeyIndex; -DevPrivateKey objectKey = &objectKeyIndex; -static int dataKeyIndex; -DevPrivateKey dataKey = &dataKeyIndex; +DevPrivateKeyRec subjectKeyRec; +DevPrivateKeyRec objectKeyRec; +DevPrivateKeyRec dataKeyRec; /* audit file descriptor */ static int audit_fd; @@ -896,9 +893,9 @@ SELinuxFlaskInit(void) FatalError("SELinux: Failed to open the system audit log\n"); /* Allocate private storage */ - if (!dixRequestPrivate(subjectKey, sizeof(SELinuxSubjectRec)) || - !dixRequestPrivate(objectKey, sizeof(SELinuxObjectRec)) || - !dixRequestPrivate(dataKey, sizeof(SELinuxObjectRec))) + if (!dixRegisterPrivateKey(subjectKey, PRIVATE_XSELINUX, sizeof(SELinuxSubjectRec)) || + !dixRegisterPrivateKey(objectKey, PRIVATE_XSELINUX, sizeof(SELinuxObjectRec)) || + !dixRegisterPrivateKey(dataKey, PRIVATE_XSELINUX, sizeof(SELinuxObjectRec))) FatalError("SELinux: Failed to allocate private storage.\n"); /* Create atoms for doing window labeling */ diff --git a/Xext/xselinuxint.h b/Xext/xselinuxint.h index e5dbe11f1..011a10370 100644 --- a/Xext/xselinuxint.h +++ b/Xext/xselinuxint.h @@ -62,9 +62,12 @@ typedef struct { * Globals */ -extern DevPrivateKey subjectKey; -extern DevPrivateKey objectKey; -extern DevPrivateKey dataKey; +extern DevPrivateKeyRec subjectKeyRec; +#define subjectKey (&subjectKeyRec) +extern DevPrivateKeyRec objectKeyRec; +#define objectKey (&objectKeyRec) +extern DevPrivateKeyRec dataKeyRec; +#define dataKey (&dataKeyRec) /* * Label functions diff --git a/Xext/xtest.c b/Xext/xtest.c index 263d0c16a..0a6b1c531 100644 --- a/Xext/xtest.c +++ b/Xext/xtest.c @@ -63,8 +63,8 @@ extern int DeviceValuator; static EventListPtr xtest_evlist; /* Used to store if a device is an XTest Virtual device */ -static int XTestDevicePrivateKeyIndex; -DevPrivateKey XTestDevicePrivateKey = &XTestDevicePrivateKeyIndex; +static DevPrivateKeyRec XTestDevicePrivateKeyRec; +#define XTestDevicePrivateKey (&XTestDevicePrivateKeyRec) /** * xtestpointer @@ -102,6 +102,9 @@ static DISPATCH_PROC(SProcXTestGrabControl); void XTestExtensionInit(INITARGS) { + if (!dixRegisterPrivateKey(&XTestDevicePrivateKeyRec, PRIVATE_DEVICE, 0)) + return; + AddExtension(XTestExtensionName, 0, 0, ProcXTestDispatch, SProcXTestDispatch, NULL, StandardMinorOpcode); diff --git a/Xext/xvmain.c b/Xext/xvmain.c index 9a367bd4c..0c34b1611 100644 --- a/Xext/xvmain.c +++ b/Xext/xvmain.c @@ -105,8 +105,8 @@ SOFTWARE. #endif #include "xvdisp.h" -static int XvScreenKeyIndex; -static DevPrivateKey XvScreenKey = &XvScreenKeyIndex; +static DevPrivateKeyRec XvScreenKeyRec; +#define XvScreenKey (&XvScreenKeyRec) unsigned long XvExtensionGeneration = 0; unsigned long XvScreenGeneration = 0; unsigned long XvResourceGeneration = 0; @@ -156,6 +156,9 @@ XvExtensionInit(void) { ExtensionEntry *extEntry; + if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0)) + return; + /* LOOK TO SEE IF ANY SCREENS WERE INITIALIZED; IF NOT THEN INIT GLOBAL VARIABLES SO THE EXTENSION CAN FUNCTION */ if (XvScreenGeneration != serverGeneration) @@ -269,6 +272,9 @@ XvScreenInit(ScreenPtr pScreen) XvScreenGeneration = serverGeneration; } + if (!dixRegisterPrivateKey(&XvScreenKeyRec, PRIVATE_SCREEN, 0)) + return BadAlloc; + if (dixLookupPrivate(&pScreen->devPrivates, XvScreenKey)) { ErrorF("XvScreenInit: screen devPrivates ptr non-NULL before init\n"); @@ -284,7 +290,6 @@ XvScreenInit(ScreenPtr pScreen) } dixSetPrivate(&pScreen->devPrivates, XvScreenKey, pxvs); - pxvs->DestroyPixmap = pScreen->DestroyPixmap; pxvs->DestroyWindow = pScreen->DestroyWindow; diff --git a/Xext/xvmc.c b/Xext/xvmc.c index 755038631..982fad13f 100644 --- a/Xext/xvmc.c +++ b/Xext/xvmc.c @@ -33,8 +33,9 @@ #define DR_CLIENT_DRIVER_NAME_SIZE 48 #define DR_BUSID_SIZE 48 -static int XvMCScreenKeyIndex; -static DevPrivateKey XvMCScreenKey; +static DevPrivateKeyRec XvMCScreenKeyRec; +#define XvMCScreenKey (&XvMCScreenKeyRec) +static Bool XvMCInUse; unsigned long XvMCGeneration = 0; @@ -138,7 +139,7 @@ ProcXvMCListSurfaceTypes(ClientPtr client) VALIDATE_XV_PORT(stuff->port, pPort, DixReadAccess); - if(XvMCScreenKey) { /* any adaptors at all */ + if(XvMCInUse) { /* any adaptors at all */ ScreenPtr pScreen = pPort->pAdaptor->pScreen; if((pScreenPriv = XVMC_GET_PRIVATE(pScreen))) { /* any this screen */ for(i = 0; i < pScreenPriv->num_adaptors; i++) { @@ -193,7 +194,7 @@ ProcXvMCCreateContext(ClientPtr client) pScreen = pPort->pAdaptor->pScreen; - if(XvMCScreenKey == NULL) /* no XvMC adaptors */ + if(!XvMCInUse) /* no XvMC adaptors */ return BadMatch; if(!(pScreenPriv = XVMC_GET_PRIVATE(pScreen))) /* none this screen */ @@ -716,7 +717,8 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt) { XvMCScreenPtr pScreenPriv; - XvMCScreenKey = &XvMCScreenKeyIndex; + if (!dixRegisterPrivateKey(&XvMCScreenKeyRec, PRIVATE_SCREEN, 0)) + return BadAlloc; if(!(pScreenPriv = malloc(sizeof(XvMCScreenRec)))) return BadAlloc; @@ -734,6 +736,8 @@ XvMCScreenInit(ScreenPtr pScreen, int num, XvMCAdaptorPtr pAdapt) pScreenPriv->minor = 0; pScreenPriv->patchLevel = 0; + XvMCInUse = TRUE; + return Success; } |