diff --git a/nx-X11/programs/Xserver/dix/devices.c b/nx-X11/programs/Xserver/dix/devices.c index 8ad1cc37137280fe601a0e1a7ceaf3adad20aa64..3dee81a25d183b5ae72ed649218d73613db47988 100644 --- a/nx-X11/programs/Xserver/dix/devices.c +++ b/nx-X11/programs/Xserver/dix/devices.c @@ -73,6 +73,8 @@ SOFTWARE. #include "swaprep.h" #include "dixevents.h" +extern void XkbFreePrivates(DeviceIntPtr device); + DeviceIntPtr AddInputDevice(DeviceProc deviceProc, Bool autoStart) { @@ -275,6 +277,13 @@ CloseDevice(register DeviceIntPtr dev) #endif free(l); } + +#ifdef XKB + XkbFreePrivates(dev); +#endif + + free(dev->devPrivates); + free(dev->sync.event); free(dev); } diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c index 4952c019746b6aab2ea3cac51e811366ad780259..6fbc66481ba8f74a08a7a6de4a0b9d4a46f2eb88 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c @@ -1034,14 +1034,6 @@ Reply Total Cached Bits In Bits Out Bits/Reply Ratio fprintf(stderr, "nxagentKeyboardProc: Called for [DEVICE_CLOSE].\n"); #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; } diff --git a/nx-X11/programs/Xserver/hw/nxagent/Pointer.c b/nx-X11/programs/Xserver/hw/nxagent/Pointer.c index 85d286b967df80c4cb81f25d309eb558da86ba66..d344f34b079c31b892de8e5f919e3f9282b36a71 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Pointer.c +++ b/nx-X11/programs/Xserver/hw/nxagent/Pointer.c @@ -166,14 +166,6 @@ int nxagentPointerProc(DeviceIntPtr pDev, int onoff) fprintf(stderr, "nxagentPointerProc: Called for [DEVICE_CLOSE].\n"); #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; } diff --git a/nx-X11/programs/Xserver/xkb/xkbActions.c b/nx-X11/programs/Xserver/xkb/xkbActions.c index 90bad93e0d2fd5a7cc182d0ae22654a0c7418a19..a39e5c8f25a628d2516b53ffbee6462054c85df3 100644 --- a/nx-X11/programs/Xserver/xkb/xkbActions.c +++ b/nx-X11/programs/Xserver/xkb/xkbActions.c @@ -81,6 +81,20 @@ XkbSetExtension(DeviceIntPtr device, ProcessInputProc proc) proc,xkbUnwrapProc); } +void +XkbFreePrivates(DeviceIntPtr device) +{ + if (device && + device->devPrivates && + device->nPrivates > 0 && + xkbDevicePrivateIndex != -1 && + xkbDevicePrivateIndex < device->nPrivates) + { + free(device->devPrivates[xkbDevicePrivateIndex].ptr); + device->devPrivates[xkbDevicePrivateIndex].ptr = NULL; + } +} + #ifdef XINPUT extern void ProcessOtherEvent( xEvent * /* xE */,