From da83ecf86aa565881ca5055fc60f83f7c41d2d58 Mon Sep 17 00:00:00 2001 From: Pierre Ossman Date: Mon, 1 Mar 2021 15:46:35 +0100 Subject: [PATCH] Drop other selection on ownership change Otherwise we might end up owners of something we cannot deliver data on, which can hang applications. --- unix/xserver/hw/vnc/vncSelection.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/unix/xserver/hw/vnc/vncSelection.c b/unix/xserver/hw/vnc/vncSelection.c index 51dfd9c..57e13e7 100644 --- a/unix/xserver/hw/vnc/vncSelection.c +++ b/unix/xserver/hw/vnc/vncSelection.c @@ -512,6 +512,13 @@ static void vncSelectionCallback(CallbackListPtr *callbacks, LOG_DEBUG("Selection owner change for %s", NameForAtom(info->selection->selection)); + /* + * If we're the previous owner of this selection, then we're also the + * owner of _the other_ selection. Make sure we drop all ownerships so + * we either own both selections or nonw. + */ + DeleteWindowFromAnySelections(pWindow); + if ((info->selection->selection != xaPRIMARY) && (info->selection->selection != xaCLIPBOARD)) return;