From f1bce3bc17ebb99b1512b07499988538465c78a2 Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 21 Aug 2014 15:33:09 +0200 Subject: 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 --- src/plugins/platforms/xcb/qxcbconnection_xi2.cpp | 6 ++++-- 1 file 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(m_xlib_display), id, &unused); + dev->xiDeviceInfo = XIQueryDevice(static_cast(m_xlib_display), id, &nrDevices); + if (nrDevices <= 0) + return 0; int type = -1; int maxTouchPoints = 1; bool hasRelativeCoords = false; -- cgit v1.2.3