提交 3f90a1aa 编写于 作者: N Nikolay Shirokovskiy 提交者: Michal Privoznik

qemu: agent: reissue sync on garbage sync reply

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.
上级 5e5019bf
......@@ -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;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册