Commit 4dd1f3cb authored by Ulrich Sibiller's avatar Ulrich Sibiller

Fix memleaks: Free devPrivates of devices on shutdown

Fixes these two memory leaks identified by valgrind: ==28336== 32 (8 direct, 24 indirect) bytes in 1 blocks are definitely lost in loss record 180 of 308 ==28336== at 0x48356AF: malloc (vg_replace_malloc.c:298) ==28336== by 0x4837DE7: realloc (vg_replace_malloc.c:826) ==28336== by 0x1AE322: AllocateDevicePrivate (privates.c:439) ==28336== by 0x27527B: XkbSetExtension (xkbActions.c:72) ==28336== by 0x198E9B: _RegisterPointerDevice (devices.c:361) ==28336== by 0x1DBA35: InitInput (Init.c:440) ==28336== by 0x14DBD6: main (main.c:303) ==28336== ==28336== 32 (8 direct, 24 indirect) bytes in 1 blocks are definitely lost in loss record 181 of 308 ==28336== at 0x48356AF: malloc (vg_replace_malloc.c:298) ==28336== by 0x4837DE7: realloc (vg_replace_malloc.c:826) ==28336== by 0x1AE322: AllocateDevicePrivate (privates.c:439) ==28336== by 0x27527B: XkbSetExtension (xkbActions.c:72) ==28336== by 0x198F1B: _RegisterKeyboardDevice (devices.c:384) ==28336== by 0x1DBA3D: InitInput (Init.c:441) ==28336== by 0x14DBD6: main (main.c:303)
parent ca741177
...@@ -1025,11 +1025,18 @@ Reply Total Cached Bits In Bits Out Bits/Reply Ratio ...@@ -1025,11 +1025,18 @@ Reply Total Cached Bits In Bits Out Bits/Reply Ratio
break; break;
case DEVICE_CLOSE: case DEVICE_CLOSE:
#ifdef TEST #ifdef TEST
fprintf(stderr, "nxagentKeyboardProc: Called for [DEVICE_CLOSE].\n"); fprintf(stderr, "nxagentKeyboardProc: Called for [DEVICE_CLOSE].\n");
#endif #endif
for (int i = 0; i < pDev->nPrivates; i++)
{
free(pDev->devPrivates[i].ptr);
pDev->devPrivates[i].ptr = NULL;
}
free(pDev->devPrivates);
pDev->devPrivates = NULL;
break; break;
} }
......
...@@ -40,7 +40,7 @@ is" without express or implied warranty. ...@@ -40,7 +40,7 @@ is" without express or implied warranty.
#include "X.h" #include "X.h"
#include "Xproto.h" #include "Xproto.h"
#include "screenint.h" #include "screenint.h"
#include "input.h" #include "inputstr.h"
#include "misc.h" #include "misc.h"
#include "scrnintstr.h" #include "scrnintstr.h"
#include "servermd.h" #include "servermd.h"
...@@ -162,11 +162,18 @@ int nxagentPointerProc(DeviceIntPtr pDev, int onoff) ...@@ -162,11 +162,18 @@ int nxagentPointerProc(DeviceIntPtr pDev, int onoff)
break; break;
case DEVICE_CLOSE: case DEVICE_CLOSE:
#ifdef TEST #ifdef TEST
fprintf(stderr, "nxagentPointerProc: Called for [DEVICE_CLOSE].\n"); fprintf(stderr, "nxagentPointerProc: Called for [DEVICE_CLOSE].\n");
#endif #endif
for (int i = 0; i < pDev->nPrivates; i++)
{
free(pDev->devPrivates[i].ptr);
pDev->devPrivates[i].ptr = NULL;
}
free(pDev->devPrivates);
pDev->devPrivates = NULL;
break; break;
} }
......
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