[PATCH 4/4] dix: Resize touch event history if the array is filled up
Timo Aaltonen
tjaalton at ubuntu.com
Thu Mar 16 10:29:44 UTC 2017
From: Maarten Lankhorst <maarten.lankhorst at ubuntu.com>
Signed-off-by: Maarten Lankhorst <maarten.lankhorst at ubuntu.com>
---
dix/touch.c | 18 ++++++++++++++++--
1 file changed, 16 insertions(+), 2 deletions(-)
diff --git a/dix/touch.c b/dix/touch.c
index 37902bd..efc7ef9 100644
--- a/dix/touch.c
+++ b/dix/touch.c
@@ -430,11 +430,25 @@ TouchEventHistoryPush(TouchPointInfoPtr ti, const DeviceEvent *ev)
if (ev->flags & (TOUCH_CLIENT_ID | TOUCH_REPLAYING))
return;
+ if (ti->history_elements == ti->history_size - 1) {
+ DeviceEvent *hist = NULL;
+ size_t sz = ti->history_size * 2;
+
+ if (sz < 10000) {
+ hist = realloc(ti->history, sz * sizeof(*hist));
+
+ if (hist) {
+ ti->history = hist;
+ ti->history_size = sz;
+ memset(&hist[sz/2], 0, sizeof(*hist)*sz/2);
+ }
+ }
+ }
+
ti->history[ti->history_elements++] = *ev;
- /* FIXME: proper overflow fixes */
if (ti->history_elements > ti->history_size - 1) {
ti->history_elements = ti->history_size - 1;
- DebugF("source device %d: history size %zu overflowing for touch %u\n",
+ ErrorF("source device %d: history size %zu overflowing for touch %u\n",
ti->sourceid, ti->history_size, ti->client_id);
}
}
--
2.7.4
More information about the xorg-devel
mailing list