Michel Dänzer <mic...@daenzer.net> writes: > On 27.05.2016 08:08, Keith Packard wrote: >> >> commit f84703b50cc908a127f4ad923ebbf56f8f244c0d >> Author: Keith Packard <kei...@keithp.com> >> Date: Tue Dec 8 14:20:21 2015 -0800 >> >> dix: Reallocate touchpoint buffer at input event time [v2] >> >> Now that input is threaded, malloc can be used at event time to resize >> the touchpoint buffer as needed.x >> >> v2: Remove "Need to grow the queue means dropping events." >> from comment as it no longer applies. (Peter Hutterer) >> >> Signed-off-by: Keith Packard <kei...@keithp.com> >> Reviewed-by: Peter Hutterer <peter.hutte...@who-t.net> > > This change broke make check for me, specifically test/touch: > > touch: ../../test/touch.c:62: touch_grow_queue: Assertion > `TouchBeginDDXTouch(&dev, 1234) == ((void *)0)' failed.
yeah, that test actually checks for the old (broken) X server behaviour of dropping touch events that overfill the buffer. The X server doesn't drop them anymore as it can call malloc while reading events now.
From 85fef2e05775beec41eaecf9ee517bd6ffeef858 Mon Sep 17 00:00:00 2001 From: Keith Packard <kei...@keithp.com> Date: Fri, 27 May 2016 01:56:39 -0700 Subject: [PATCH xserver] test: Make touch test reflect new ability to realloc touch array Threaded input allows the input code to call malloc while processing events. In this case, that's in the middle of processing touch events and needing to resize the touch buffer. This test was expecting the old behaviour where touch points would get dropped if the buffer was full. The fix is to check for the new behaviour instead. Signed-off-by: Keith Packard <kei...@keithp.com> --- test/touch.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/test/touch.c b/test/touch.c index 981c694..e0c1bcc 100644 --- a/test/touch.c +++ b/test/touch.c @@ -58,9 +58,8 @@ touch_grow_queue(void) dev.last.touches[i].client_id = i * 2; } - /* no more space, should've scheduled a workproc */ - assert(TouchBeginDDXTouch(&dev, 1234) == NULL); - ProcessWorkQueue(); + /* no more space, should've reallocated and succeeded */ + assert(TouchBeginDDXTouch(&dev, 1234) != NULL); new_size = size + size / 2 + 1; assert(dev.last.num_touches == new_size); @@ -74,8 +73,12 @@ touch_grow_queue(void) assert(t->client_id == i * 2); } + assert(dev.last.touches[size].active == TRUE); + assert(dev.last.touches[size].ddx_id == 1234); + assert(dev.last.touches[size].client_id == 1); + /* make sure those are zero-initialized */ - for (i = size; i < new_size; i++) { + for (i = size + 1; i < new_size; i++) { DDXTouchPointInfoPtr t = &dev.last.touches[i]; assert(t->active == FALSE); @@ -136,22 +139,20 @@ touch_find_ddxid(void) for (i = 0; i < size; i++) dev.last.touches[i].active = TRUE; - /* Try to create more, fail */ + /* Try to create more, succeed */ ti = TouchFindByDDXID(&dev, 30, TRUE); - assert(ti == NULL); + assert(ti != NULL); ti = TouchFindByDDXID(&dev, 30, TRUE); - assert(ti == NULL); - /* make sure we haven't resized, we're in the signal handler */ - assert(dev.last.num_touches == size); + assert(ti != NULL); + /* make sure we have resized */ + assert(dev.last.num_touches == size + 3); /* stop one touchpoint, try to create, succeed */ dev.last.touches[2].active = FALSE; - ti = TouchFindByDDXID(&dev, 30, TRUE); + ti = TouchFindByDDXID(&dev, 35, TRUE); assert(ti == &dev.last.touches[2]); - /* but still grow anyway */ - ProcessWorkQueue(); ti = TouchFindByDDXID(&dev, 40, TRUE); - assert(ti == &dev.last.touches[size]); + assert(ti == &dev.last.touches[size+1]); free(dev.name); } -- 2.8.1
-- -keith
signature.asc
Description: PGP signature
_______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel