Alloc/free drawables array for each ProcPanoramiXShmGetImage call.
Updates my previous patch, b422b532f3.
keithp recommended against allocating the drawables array globally, but my
updated patch with that fixed isn't the patch that landed.
Signed-off-by: Jamey Sharp <jamey@minilop.net>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
parent
757c11630d
commit
25979c46b4
17
Xext/shm.c
17
Xext/shm.c
|
|
@ -141,7 +141,6 @@ int BadShmSegCode;
|
||||||
RESTYPE ShmSegType;
|
RESTYPE ShmSegType;
|
||||||
static ShmDescPtr Shmsegs;
|
static ShmDescPtr Shmsegs;
|
||||||
static Bool sharedPixmaps;
|
static Bool sharedPixmaps;
|
||||||
static DrawablePtr *drawables;
|
|
||||||
static int shmScrPrivateKeyIndex;
|
static int shmScrPrivateKeyIndex;
|
||||||
static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex;
|
static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex;
|
||||||
static int shmPixmapPrivateIndex;
|
static int shmPixmapPrivateIndex;
|
||||||
|
|
@ -259,13 +258,6 @@ ShmExtensionInit(INITARGS)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
drawables = xcalloc(screenInfo.numScreens, sizeof(DrawablePtr));
|
|
||||||
if (!drawables)
|
|
||||||
{
|
|
||||||
ErrorF("MIT-SHM extension disabled: no memory for per-screen drawables\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
sharedPixmaps = xFalse;
|
sharedPixmaps = xFalse;
|
||||||
{
|
{
|
||||||
sharedPixmaps = xTrue;
|
sharedPixmaps = xTrue;
|
||||||
|
|
@ -618,6 +610,7 @@ static int
|
||||||
ProcPanoramiXShmGetImage(ClientPtr client)
|
ProcPanoramiXShmGetImage(ClientPtr client)
|
||||||
{
|
{
|
||||||
PanoramiXRes *draw;
|
PanoramiXRes *draw;
|
||||||
|
DrawablePtr *drawables;
|
||||||
DrawablePtr pDraw;
|
DrawablePtr pDraw;
|
||||||
xShmGetImageReply xgi;
|
xShmGetImageReply xgi;
|
||||||
ShmDescPtr shmdesc;
|
ShmDescPtr shmdesc;
|
||||||
|
|
@ -678,12 +671,19 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
||||||
return(BadMatch);
|
return(BadMatch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
drawables = xcalloc(PanoramiXNumScreens, sizeof(DrawablePtr));
|
||||||
|
if(!drawables)
|
||||||
|
return(BadAlloc);
|
||||||
|
|
||||||
drawables[0] = pDraw;
|
drawables[0] = pDraw;
|
||||||
for(i = 1; i < PanoramiXNumScreens; i++) {
|
for(i = 1; i < PanoramiXNumScreens; i++) {
|
||||||
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
|
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
|
||||||
DixReadAccess);
|
DixReadAccess);
|
||||||
if (rc != Success)
|
if (rc != Success)
|
||||||
|
{
|
||||||
|
xfree(drawables);
|
||||||
return rc;
|
return rc;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
xgi.visual = wVisual(((WindowPtr)pDraw));
|
xgi.visual = wVisual(((WindowPtr)pDraw));
|
||||||
|
|
@ -722,6 +722,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
xfree(drawables);
|
||||||
|
|
||||||
if (client->swapped) {
|
if (client->swapped) {
|
||||||
int n;
|
int n;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue