diff options
author | Hans de Goede <hdegoede@redhat.com> | 2010-10-06 16:14:06 +0200 |
---|---|---|
committer | Hans de Goede <hdegoede@redhat.com> | 2010-10-06 19:17:08 +0200 |
commit | dddb6ad48ada0ddd5327ee8ab70b87540d5150a5 (patch) | |
tree | 5632fb11e9e0840788d31d9a8c99de062427b10d /client/x11 | |
parent | 7b84db7a7484b58fdde21029ef374baeaa0a4b51 (diff) | |
download | spice-dddb6ad48ada0ddd5327ee8ab70b87540d5150a5.tar.gz spice-dddb6ad48ada0ddd5327ee8ab70b87540d5150a5.tar.xz spice-dddb6ad48ada0ddd5327ee8ab70b87540d5150a5.zip |
spicec-x11: Remove a race window in selection ownership release code
Well almost remove it, it was possible that another x11 app would acquire
selection ownership, and we would receive a release message from the
agent before having processed the xselection ownership change event.
Then we would set the selection owner to none, overriding the new owner.
As the comment in the patch indicates there still is a minute window left
where something similar can happen after this patch. Nothing we can do
about that (I blame the libX11 selection API).
Diffstat (limited to 'client/x11')
-rw-r--r-- | client/x11/platform.cpp | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/client/x11/platform.cpp b/client/x11/platform.cpp index 8f0665cb..cb2431fb 100644 --- a/client/x11/platform.cpp +++ b/client/x11/platform.cpp @@ -3466,7 +3466,15 @@ void Platform::on_clipboard_release() { XEvent event; + if (XGetSelectionOwner(x_display, clipboard_prop) != platform_win) { + LOG_INFO("Platform::on_clipboard_release() called while not selection owner"); + return; + } + /* Note there is a small race window here where another x11 app could + acquire selection ownership and we kick it off again, nothing we + can do about that :( */ XSetSelectionOwner(x_display, clipboard_prop, None, CurrentTime); + /* Make sure we process the XFixesSetSelectionOwnerNotify event caused by this, so we don't end up changing the clipboard owner to none, after it has already been re-owned because this event is still pending. */ |