summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@digia.com>2014-08-21 15:33:09 +0200
committerAllan Sandfeld Jensen <allan.jensen@digia.com>2014-08-26 17:16:13 +0200
commitf1bce3bc17ebb99b1512b07499988538465c78a2 (patch)
tree47b47cc81e8e03d91047721c4ea0a8ad23e89c8b
parente9e66079b16754f1fef89c2ad93593d7d55c8654 (diff)
Avoid crash if querying device that has gone away
A device removed very fast after being inserted might disappear while we are still seting it up. We must therefore check if we indeed still get a matching device Task-number: QTBUG-40820 Change-Id: I4372fb1932264e5799f37cea0d016795e28ebed6 Reviewed-by: Shawn Rutledge <shawn.rutledge@digia.com>
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection_xi2.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
index 4986e85728..b38f9d42a9 100644
--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
@@ -331,10 +331,12 @@ XInput2DeviceData *QXcbConnection::deviceForId(int id)
{
XInput2DeviceData *dev = m_touchDevices[id];
if (!dev) {
- int unused = 0;
+ int nrDevices = 0;
QTouchDevice::Capabilities caps = 0;
dev = new XInput2DeviceData;
- dev->xiDeviceInfo = XIQueryDevice(static_cast<Display *>(m_xlib_display), id, &unused);
+ dev->xiDeviceInfo = XIQueryDevice(static_cast<Display *>(m_xlib_display), id, &nrDevices);
+ if (nrDevices <= 0)
+ return 0;
int type = -1;
int maxTouchPoints = 1;
bool hasRelativeCoords = false;