qemu_agent: Bring back single sync

Historically, we had no idea whether the qemu-ga running inside
the guest was running or not. Or whether it crashed in the middle
of reading of a command. That's why we issued guest-sync prior
any intended command, to make the agent flush any partially read
JSON and reset its state machine.

But with VSERPORT_CHANGE event we know when the guest agent
(dis-)connects and thus can issue the sync command just once for
each 'connection'. Whether the agent is synced is tracked in
agent->inSync member, which used to be set to true upon
successful sync. But after rework in v8.0.0-rc1~361 that line is
gone, leaving us with using the historic approach basically.

Fixes: cad84fd51e
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Michal Privoznik 2022-11-07 18:17:12 +01:00
parent d649faddb3
commit 91ef81a378

View File

@ -869,16 +869,20 @@ qemuAgentGuestSync(qemuAgent *agent)
return -1;
/* successfully sync'd */
if (rc == 1)
if (rc == 1) {
agent->inSync = true;
return 0;
}
/* send another sync */
if ((rc = qemuAgentGuestSyncSend(agent, timeout, false)) < 0)
return -1;
/* successfully sync'd */
if (rc == 1)
if (rc == 1) {
agent->inSync = true;
return 0;
}
if (agent->running)
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",