diff options
author | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-05-16 20:56:04 +0930 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-05-16 20:56:04 +0930 |
commit | dfb7de6571345061d1cd88ab915064fc376529fd (patch) | |
tree | 2f62b8cca24befb5f43f32c439fb39e8c29184eb /mi/mipointer.c | |
parent | f611719edce2ae51dca8e53947a3938b53c20b00 (diff) |
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.
Diffstat (limited to 'mi/mipointer.c')
-rw-r--r-- | mi/mipointer.c | 6 |
1 files changed, 5 insertions, 1 deletions
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; |