From 3bc1cf73ea96082929232797e98823fa3e5ed4ed Mon Sep 17 00:00:00 2001
From: Pierre Ossman <ossman@cendio.se>
Date: Thu, 26 Mar 2026 10:10:12 +0100
Subject: [PATCH] Use locks to avoid races with input thread

Taken from how Xorg deals with hooking these functions. Without it we
can get corruption of the sprite functions struct.
---
 unix/xserver/hw/vnc/vncHooks.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/unix/xserver/hw/vnc/vncHooks.c b/unix/xserver/hw/vnc/vncHooks.c
index e800e24f..c2ed80e1 100644
--- a/unix/xserver/hw/vnc/vncHooks.c
+++ b/unix/xserver/hw/vnc/vncHooks.c
@@ -1122,6 +1122,7 @@ static Bool vncHooksRandRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc,
 // Unwrap and rewrap helpers
 
 #define SPRITE_PROLOGUE(field)                                            \
+  input_lock();                                                           \
   miPointerScreenPtr miPointerPriv =                                      \
     dixLookupPrivate(&screen->devPrivates, miPointerScreenKey);           \
   vncHooksScreenPtr vncHooksScreen = vncHooksScreenPrivate(screen);       \
@@ -1130,6 +1131,7 @@ static Bool vncHooksRandRCrtcSet(ScreenPtr pScreen, RRCrtcPtr crtc,
 
 #define SPRITE_EPILOGUE(field)                                            \
   wrap(vncHooksScreen, miPointerPriv, spriteFuncs, &vncHooksSpriteFuncs); \
+  input_unlock();
 
 static Bool vncHooksRealizeCursor(DeviceIntPtr dev, ScreenPtr screen,
                                   CursorPtr cursor)
-- 
2.51.0

