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;
|
||||
static ShmDescPtr Shmsegs;
|
||||
static Bool sharedPixmaps;
|
||||
static DrawablePtr *drawables;
|
||||
static int shmScrPrivateKeyIndex;
|
||||
static DevPrivateKey shmScrPrivateKey = &shmScrPrivateKeyIndex;
|
||||
static int shmPixmapPrivateIndex;
|
||||
|
@ -259,13 +258,6 @@ ShmExtensionInit(INITARGS)
|
|||
}
|
||||
#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 = xTrue;
|
||||
|
@ -618,6 +610,7 @@ static int
|
|||
ProcPanoramiXShmGetImage(ClientPtr client)
|
||||
{
|
||||
PanoramiXRes *draw;
|
||||
DrawablePtr *drawables;
|
||||
DrawablePtr pDraw;
|
||||
xShmGetImageReply xgi;
|
||||
ShmDescPtr shmdesc;
|
||||
|
@ -678,12 +671,19 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
|||
return(BadMatch);
|
||||
}
|
||||
|
||||
drawables = xcalloc(PanoramiXNumScreens, sizeof(DrawablePtr));
|
||||
if(!drawables)
|
||||
return(BadAlloc);
|
||||
|
||||
drawables[0] = pDraw;
|
||||
for(i = 1; i < PanoramiXNumScreens; i++) {
|
||||
rc = dixLookupDrawable(drawables+i, draw->info[i].id, client, 0,
|
||||
DixReadAccess);
|
||||
if (rc != Success)
|
||||
{
|
||||
xfree(drawables);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
|
||||
xgi.visual = wVisual(((WindowPtr)pDraw));
|
||||
|
@ -722,6 +722,7 @@ ProcPanoramiXShmGetImage(ClientPtr client)
|
|||
}
|
||||
}
|
||||
}
|
||||
xfree(drawables);
|
||||
|
||||
if (client->swapped) {
|
||||
int n;
|
||||
|
|
Loading…
Reference in New Issue