ping?

On Mon, Jan 28, 2019 at 10:29 AM Jakub Janku <jja...@redhat.com> wrote:
>
> Hi,
>
> I tried to fix this bug in a less radical way, but my patch unfortunately did 
> not cover all the cases.
>
> I obtained some logs from James Harvey which make the situation clearer - it 
> can be found here:
> https://termbin.com/40un
> So I'll try to explain what's happening:
>
> James uses KDE which has a clipboard manager integrated in (klipper).
>
> (1) user copies something in the guest, grab is sent to the spice-gtk
> (2) clipboard manager immediately requests the data, data is retrieved from 
> the vdagent
> (3) user pastes the copied data in guest, this causes a quick re-grab in the 
> guest = a clipboard release message is sent to spice-gtk and it is 
> immediately followed by a new grab
> (4) spice-gtk receives clipboard release, so it clears the clipboard
> (5) clipboard manager detects that the clipboard has no owner, so it grabs it 
> itself, advertising the data it originally obtained from us in step (2) (this 
> normally enables the user to paste the data even after the source app has 
> been closed)
> (6) spice-gtk receives "owner-change" signal caused by the grab in step (5), 
> requests clipboard targets and sends a grab to vdagent
> (7) spice-gtk finally receives the grab from step (3), so it sets the 
> clipboard using gtk_clipboard_set_with_owner()
> (8) vdagent receives grab from step (6), so it too sets the clipboard using 
> gtk_clipboard_set_with_owner()
>
> This is clearly a race. We ended up in a state where both spice-gtk and 
> vdagent thinks the other component can provide the data, but in reality none 
> of them can.
>
> (This does not happen always, as can be seen in the log, the first paste 
> succeeds.)
>
> Given current spice protocol, I don't see a way to detect the race on either 
> side, but I'd love to be wrong. So I'd update the commit log and comment in 
> the code to explain the situation and then it's ack from me.
>
> Cheers,
> Jakub
>
> On Mon, Jan 14, 2019, 1:34 PM Victor Toso <victort...@redhat.com wrote:
>>
>> From: Victor Toso <m...@victortoso.com>
>>
>> On X11, the release-grab message might end up clearing the
>> GtkClipboard which triggers the owner-changed callback having the
>> event owner as NULL.
>>
>> We should not be calling gtk_clipboard_request_targets() in this
>> situation as is prone to errors as the intention here is request
>> clipboard information from changes made by client OS.
>>
>> The fix is to avoid any such request while spice client is holding the
>> keyboard grab.
>>
>> Related: https://gitlab.freedesktop.org/spice/win32/vd_agent/issues/6
>> Related: https://gitlab.freedesktop.org/spice/linux/vd_agent/issues/9
>> Related: https://bugzilla.redhat.com/show_bug.cgi?id=1594876
>>
>> Changed in v4:
>> - Updated commit log
>>
>> Signed-off-by: Victor Toso <victort...@redhat.com>
>> Tested-by: James Harvey @jamespharvey20
>> ---
>>  src/spice-gtk-session.c | 13 +++++++++++++
>>  1 file changed, 13 insertions(+)
>>
>> diff --git a/src/spice-gtk-session.c b/src/spice-gtk-session.c
>> index abce43f..20df70d 100644
>> --- a/src/spice-gtk-session.c
>> +++ b/src/spice-gtk-session.c
>> @@ -674,6 +674,19 @@ static void clipboard_owner_change(GtkClipboard        
>> *clipboard,
>>          return;
>>      }
>>
>> +#ifdef GDK_WINDOWING_X11
>> +    /* In X11, while holding the keyboard-grab we are not interested in this
>> +     * event as it either came by grab or release messages from agent.  */
>> +    if (GDK_IS_X11_DISPLAY(gdk_display_get_default()) &&
>> +        spice_gtk_session_get_keyboard_has_focus(self)) {
>> +        SPICE_DEBUG("clipboard: owner-changed event: not requesting 
>> client's target "
>> +                    "while holding focus");
>> +        return;
>> +    }
>> +#endif
>> +    SPICE_DEBUG("clipboard: owner-changed event: has-focus=%d",
>> +                spice_gtk_session_get_keyboard_has_focus(self));
>> +
>>      s->clipboard_by_guest[selection] = FALSE;
>>      s->clip_hasdata[selection] = TRUE;
>>      if (s->auto_clipboard_enable && !read_only(self))
>> --
>> 2.20.1
>>
_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to