From dfb7de6571345061d1cd88ab915064fc376529fd Mon Sep 17 00:00:00 2001 From: Peter Hutterer Date: Fri, 16 May 2008 20:56:04 +0930 Subject: [PATCH] mi: don't call from miPointerMoved into the spriteFuncs for anything but VCP. Calling ->MoveCursor for anything but the HW-rendered VCP causes the SW-rendered cursor routines to be started, including mallocs, etc. Since miPointerMoved is called during SIGIO, this is a bad idea. --- mi/mipointer.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mi/mipointer.c b/mi/mipointer.c index 484947da9..6f39bcb5c 100644 --- a/mi/mipointer.c +++ b/mi/mipointer.c @@ -530,7 +530,11 @@ miPointerMoved (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y, pPointer = MIPOINTER(pDev); - if (pDev && pDev->coreEvents + /* Hack: We mustn't call into ->MoveCursor for anything but the + * VCP, as this may cause a non-HW rendered cursor to be rendered during + * SIGIO. This again leads to allocs during SIGIO which leads to SIGABRT. + */ + if ((pDev == inputInfo.pointer || (!pDev->isMaster && pDev->u.master == inputInfo.pointer)) && !pScreenPriv->waitForUpdate && pScreen == pPointer->pSpriteScreen) { pPointer->devx = x;