From eaf1d58ec58ea14418d59358db80f0a79afc3588 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Fri, 20 Jan 2017 09:49:19 +0000 Subject: [PATCH xserver] xfree86: Take input_lock() for xf86ScreenCheckHWCursor --- hw/xfree86/ramdac/xf86HWCurs.c | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/hw/xfree86/ramdac/xf86HWCurs.c b/hw/xfree86/ramdac/xf86HWCurs.c index 26dc7e5af..7043a9c72 100644 --- a/hw/xfree86/ramdac/xf86HWCurs.c +++ b/hw/xfree86/ramdac/xf86HWCurs.c @@ -139,9 +139,14 @@ Bool xf86CheckHWCursor(ScreenPtr pScreen, CursorPtr cursor, xf86CursorInfoPtr infoPtr) { ScreenPtr pSlave; + Bool use_hw_cursor = TRUE; - if (!xf86ScreenCheckHWCursor(pScreen, cursor, infoPtr)) - return FALSE; + input_lock(); + + if (!xf86ScreenCheckHWCursor(pScreen, cursor, infoPtr)) { + use_hw_cursor = FALSE; + goto unlock; + } /* ask each driver consuming a pixmap if it can support HW cursor */ xorg_list_for_each_entry(pSlave, &pScreen->slave_list, slave_head) { @@ -151,14 +156,22 @@ xf86CheckHWCursor(ScreenPtr pScreen, CursorPtr cursor, xf86CursorInfoPtr infoPtr continue; sPriv = dixLookupPrivate(&pSlave->devPrivates, xf86CursorScreenKey); - if (!sPriv) /* NULL if Option "SWCursor", possibly other conditions */ - return FALSE; + if (!sPriv) { /* NULL if Option "SWCursor", possibly other conditions */ + use_hw_cursor = FALSE; + break; + } /* FALSE if HWCursor not supported by slave */ - if (!xf86ScreenCheckHWCursor(pSlave, cursor, sPriv->CursorInfoPtr)) - return FALSE; + if (!xf86ScreenCheckHWCursor(pSlave, cursor, sPriv->CursorInfoPtr)) { + use_hw_cursor = FALSE; + break; + } } - return TRUE; + +unlock: + input_unlock(); + + return use_hw_cursor; } static Bool -- 2.11.0