aboutsummaryrefslogtreecommitdiff
path: root/nx-X11
diff options
context:
space:
mode:
authorUlrich Sibiller <uli42@gmx.de>2019-06-20 01:21:44 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2019-06-22 11:30:47 +0200
commit213e63eed7f808633dc865af94a9ea4ee703f228 (patch)
treead8899606a2ac262ff704b8a55d0e20c07e0ec2d /nx-X11
parente63d9de4565b97645956adf19d7f162ae0d471bd (diff)
downloadnx-libs-213e63eed7f808633dc865af94a9ea4ee703f228.tar.gz
nx-libs-213e63eed7f808633dc865af94a9ea4ee703f228.tar.bz2
nx-libs-213e63eed7f808633dc865af94a9ea4ee703f228.zip
Screen.c: fix two memleaks
While at it create and use the freeDepths() helper function.
Diffstat (limited to 'nx-X11')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Screen.c37
1 files changed, 18 insertions, 19 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
index 147a3108d..67151733f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
@@ -844,6 +844,19 @@ static int nxagentColorOffset(unsigned long mask)
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,
int argc, char *argv[])
{
@@ -1335,6 +1348,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
if (!pFrameBufferBits)
{
+ freeDepths(depths, numDepths);
return FALSE;
}
@@ -1356,6 +1370,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
if (!fbScreenInit(pScreen, pFrameBufferBits, nxagentOption(RootWidth), nxagentOption(RootHeight),
monitorResolution, monitorResolution, PixmapBytePad(nxagentOption(RootWidth), rootDepth), bitsPerPixel))
{
+ freeDepths(depths, numDepths);
return FALSE;
}
@@ -1391,15 +1406,7 @@ Bool nxagentOpenScreen(ScreenPtr pScreen,
* by fbScreenInit with our own.
*/
- for (int i = 0; i < pScreen->numDepths; i++)
- {
- #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);
+ freeDepths(pScreen->allowedDepths, pScreen->numDepths);
pScreen -> allowedDepths = depths;
pScreen -> numDepths = numDepths;
pScreen -> rootDepth = rootDepth;
@@ -2155,15 +2162,8 @@ Bool nxagentCloseScreen(ScreenPtr pScreen)
* them again.
*/
- for (int i = 0; i < pScreen->numDepths; i++)
- {
- #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;
- }
-
+ freeDepths(pScreen->allowedDepths, pScreen->numDepths);
+ pScreen->allowedDepths = NULL;
pScreen->numDepths = 0;
/*
@@ -2172,7 +2172,6 @@ Bool nxagentCloseScreen(ScreenPtr pScreen)
free(((PixmapPtr)pScreen -> devPrivate) -> devPrivate.ptr);
free(pScreen->devPrivate);pScreen->devPrivate = NULL;
- free(pScreen->allowedDepths); pScreen->allowedDepths = NULL;
free(pScreen->visuals); pScreen->visuals = NULL;
fbCloseScreen(pScreen);