[vdagent-win PATCH 2/2] vdagent: drop clipboard received after timeout

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



rhbz #951618
---
 vdagent/vdagent.cpp |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/vdagent/vdagent.cpp b/vdagent/vdagent.cpp
index 1fad0e6..3c0f829 100644
--- a/vdagent/vdagent.cpp
+++ b/vdagent/vdagent.cpp
@@ -979,9 +979,12 @@ void VDAgent::on_clipboard_request(UINT format)
         event_dispatcher(VD_CLIPBOARD_TIMEOUT_MS, 0);
     }
 
-    cleanup_in_msg();
     if (_clipboard_tick) {
         vd_printf("Clipboard wait timeout");
+        _clipboard_tick = 0;
+    } else {
+        // reset incoming message state only upon completion (even after timeout)
+        cleanup_in_msg();
     }
 }
 
@@ -1303,11 +1306,15 @@ void VDAgent::handle_chunk(VDIChunk* chunk)
         memcpy((uint8_t*)_in_msg + _in_msg_pos, chunk->data, chunk->hdr.size);
         _in_msg_pos += chunk->hdr.size;
         // update clipboard tick on each clipboard chunk for timeout setting
-        if (_in_msg->type == VD_AGENT_CLIPBOARD) {
+        if (_in_msg->type == VD_AGENT_CLIPBOARD && _clipboard_tick) {
             _clipboard_tick = GetTickCount();
         }
         if (_in_msg_pos == sizeof(VDAgentMessage) + _in_msg->size) {
-            dispatch_message(_in_msg, 0);
+            if (_in_msg->type == VD_AGENT_CLIPBOARD && !_clipboard_tick) {
+                vd_printf("Clipboard received but dropped due to timeout");
+            } else {
+                dispatch_message(_in_msg, 0);
+            }
             cleanup_in_msg();
         }
     }
-- 
1.7.7.6

_______________________________________________
Spice-devel mailing list
Spice-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/spice-devel




[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]     [Monitors]