[PATCH 4/5] qemu: agent: reissue sync on garbage sync reply

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

 



We can easily handle receiving garbage on sync. We don't
have to make client deal with this situation. We just
need to resend sync command but this time garbage is
not be possible.
---
 src/qemu/qemu_agent.c | 20 +++++++++++++++-----
 1 file changed, 15 insertions(+), 5 deletions(-)

diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index 30a1c77..8f47618 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -85,6 +85,7 @@ struct _qemuAgentMessage {
     bool sync;
     /* id of the issued sync comand */
     unsigned long long id;
+    bool first;
 };
 
 
@@ -316,8 +317,8 @@ qemuAgentIOProcessLine(qemuAgentPtr mon,
     VIR_DEBUG("Line [%s]", line);
 
     if (!(obj = virJSONValueFromString(line))) {
-        /* receiving garbage on sync is regular situation */
-        if (msg && msg->sync) {
+        /* receiving garbage on first sync is regular situation */
+        if (msg && msg->sync && msg->first) {
             VIR_DEBUG("Received garbage on sync");
             msg->finished = 1;
             return 0;
@@ -959,7 +960,10 @@ qemuAgentGuestSync(qemuAgentPtr mon)
     qemuAgentMessage sync_msg;
 
     memset(&sync_msg, 0, sizeof(sync_msg));
+    /* set only on first sync */
+    sync_msg.first = true;
 
+ retry:
     if (virTimeMillisNow(&id) < 0)
         return -1;
 
@@ -983,9 +987,15 @@ qemuAgentGuestSync(qemuAgentPtr mon)
         goto cleanup;
 
     if (!sync_msg.rxObject) {
-        virReportError(VIR_ERR_AGENT_UNSYNCED, "%s",
-                       _("Missing monitor reply object"));
-        goto cleanup;
+        if (sync_msg.first) {
+            VIR_FREE(sync_msg.txBuffer);
+            memset(&sync_msg, 0, sizeof(sync_msg));
+            goto retry;
+        } else {
+            virReportError(VIR_ERR_AGENT_UNSYNCED, "%s",
+                           _("Missing monitor reply object"));
+            goto cleanup;
+        }
     }
 
     ret = 0;
-- 
1.8.3.1

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list



[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]