Commit 213e63ee authored by Ulrich Sibiller's avatar Ulrich Sibiller Committed by Mike Gabriel

Screen.c: fix two memleaks

While at it create and use the freeDepths() helper function.
parent e63d9de4
...@@ -844,6 +844,19 @@ static int nxagentColorOffset(unsigned long mask) ...@@ -844,6 +844,19 @@ static int nxagentColorOffset(unsigned long mask)
return count; return count;
} }
void freeDepths(DepthPtr depths, int num)
{
for (int i = 0; i < num; i++)
{
#ifdef DEBUG
fprintf(stderr, "%s: freeing depth [%d] index [%d] vids [%p]\n", __func__, depths[i].depth, i, (void*) depths[i].vids);
#endif
free(depths[i].vids);
depths[i].vids = NULL;
}
free(depths);
}
Bool nxagentOpenScreen(ScreenPtr pScreen, Bool nxagentOpenScreen(ScreenPtr pScreen,
int argc, char *argv[]) int argc, char *argv[])
{ {
...@@ -1335,6 +1348,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen, ...@@ -1335,6 +1348,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
if (!pFrameBufferBits) if (!pFrameBufferBits)
{ {
freeDepths(depths, numDepths);
return FALSE; return FALSE;
} }
...@@ -1356,6 +1370,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen, ...@@ -1356,6 +1370,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
if (!fbScreenInit(pScreen, pFrameBufferBits, nxagentOption(RootWidth), nxagentOption(RootHeight), if (!fbScreenInit(pScreen, pFrameBufferBits, nxagentOption(RootWidth), nxagentOption(RootHeight),
monitorResolution, monitorResolution, PixmapBytePad(nxagentOption(RootWidth), rootDepth), bitsPerPixel)) monitorResolution, monitorResolution, PixmapBytePad(nxagentOption(RootWidth), rootDepth), bitsPerPixel))
{ {
freeDepths(depths, numDepths);
return FALSE; return FALSE;
} }
...@@ -1391,15 +1406,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen, ...@@ -1391,15 +1406,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
* by fbScreenInit with our own. * by fbScreenInit with our own.
*/ */
for (int i = 0; i < pScreen->numDepths; i++) freeDepths(pScreen->allowedDepths, pScreen->numDepths);
{
#ifdef DEBUG
fprintf(stderr, "%s: freeing depth [%d] index [%d] vids [%p]\n", __func__, pScreen->allowedDepths[i].depth, i, (void*) pScreen->allowedDepths[i].vids);
#endif
free(pScreen->allowedDepths[i].vids);
}
free(pScreen -> allowedDepths);
pScreen -> allowedDepths = depths; pScreen -> allowedDepths = depths;
pScreen -> numDepths = numDepths; pScreen -> numDepths = numDepths;
pScreen -> rootDepth = rootDepth; pScreen -> rootDepth = rootDepth;
...@@ -2155,15 +2162,8 @@ Bool nxagentCloseScreen(ScreenPtr pScreen) ...@@ -2155,15 +2162,8 @@ Bool nxagentCloseScreen(ScreenPtr pScreen)
* them again. * them again.
*/ */
for (int i = 0; i < pScreen->numDepths; i++) freeDepths(pScreen->allowedDepths, pScreen->numDepths);
{ pScreen->allowedDepths = NULL;
#ifdef DEBUG
fprintf(stderr, "%s: freeing depth [%d] index [%d] vids [%p]\n", __func__, pScreen->allowedDepths[i].depth, i, (void*) pScreen->allowedDepths[i].vids);
#endif
free(pScreen->allowedDepths[i].vids);
pScreen->allowedDepths[i].vids = NULL;
}
pScreen->numDepths = 0; pScreen->numDepths = 0;
/* /*
...@@ -2172,7 +2172,6 @@ Bool nxagentCloseScreen(ScreenPtr pScreen) ...@@ -2172,7 +2172,6 @@ Bool nxagentCloseScreen(ScreenPtr pScreen)
free(((PixmapPtr)pScreen -> devPrivate) -> devPrivate.ptr); free(((PixmapPtr)pScreen -> devPrivate) -> devPrivate.ptr);
free(pScreen->devPrivate);pScreen->devPrivate = NULL; free(pScreen->devPrivate);pScreen->devPrivate = NULL;
free(pScreen->allowedDepths); pScreen->allowedDepths = NULL;
free(pScreen->visuals); pScreen->visuals = NULL; free(pScreen->visuals); pScreen->visuals = NULL;
fbCloseScreen(pScreen); fbCloseScreen(pScreen);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment