aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gabriel <mike.gabriel@das-netzwerkteam.de>2019-06-23 21:39:51 +0200
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2019-06-23 21:39:51 +0200
commit4a440feaf5c4ff7ac8d944a7a9832444fca924d3 (patch)
tree4356a989e631c00f23dd12bce627b04c6e1172a9
parentabf3741362f4c200945db6403fcd54df6754d4af (diff)
parent3aabc92cf81f20b89dc49e8db3c56ad9fa08481b (diff)
downloadnx-libs-4a440feaf5c4ff7ac8d944a7a9832444fca924d3.tar.gz
nx-libs-4a440feaf5c4ff7ac8d944a7a9832444fca924d3.tar.bz2
nx-libs-4a440feaf5c4ff7ac8d944a7a9832444fca924d3.zip
Merge branch 'uli42-pr/fix_xkb_privates' into 3.6.x
Attributes GH PR #818: https://github.com/ArcticaProject/nx-libs/pull/818
-rw-r--r--nx-X11/programs/Xserver/dix/devices.c9
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keyboard.c8
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Pointer.c8
-rw-r--r--nx-X11/programs/Xserver/xkb/xkbActions.c14
4 files changed, 23 insertions, 16 deletions
diff --git a/nx-X11/programs/Xserver/dix/devices.c b/nx-X11/programs/Xserver/dix/devices.c
index 8ad1cc371..3dee81a25 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 4952c0197..6fbc66481 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 85d286b96..d344f34b0 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 90bad93e0..a39e5c8f2 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 */,