GSource *watch;
bool running;
+ bool singleSync;
+ bool inSync;
virDomainObjPtr vm;
qemuAgentOpen(virDomainObjPtr vm,
const virDomainChrSourceDef *config,
GMainContext *context,
- qemuAgentCallbacksPtr cb)
+ qemuAgentCallbacksPtr cb,
+ bool singleSync)
{
qemuAgentPtr agent;
g_autoptr(GError) gerr = NULL;
}
agent->vm = vm;
agent->cb = cb;
+ agent->singleSync = singleSync;
if (config->type != VIR_DOMAIN_CHR_TYPE_UNIX) {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unable to wait on agent socket "
"condition"));
}
+ agent->inSync = false;
goto cleanup;
}
}
qemuAgentMessage sync_msg;
int timeout = VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT;
+ if (agent->singleSync && agent->inSync)
+ return 0;
+
/* if user specified a custom agent timeout that is lower than the
* default timeout, use the shorter timeout instead */
if ((agent->timeout >= 0) && (agent->timeout < timeout))
}
}
+ if (agent->singleSync)
+ agent->inSync = true;
+
ret = 0;
cleanup:
qemuAgentPtr qemuAgentOpen(virDomainObjPtr vm,
const virDomainChrSourceDef *config,
GMainContext *context,
- qemuAgentCallbacksPtr cb);
+ qemuAgentCallbacksPtr cb,
+ bool singleSync);
void qemuAgentClose(qemuAgentPtr mon);
agent = qemuAgentOpen(vm,
config->source,
virEventThreadGetContext(priv->eventThread),
- &agentCallbacks);
+ &agentCallbacks,
+ virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_VSERPORT_CHANGE));
virObjectLock(vm);
if (!(test->agent = qemuAgentOpen(test->vm,
&src,
virEventThreadGetContext(test->eventThread),
- &qemuMonitorTestAgentCallbacks)))
+ &qemuMonitorTestAgentCallbacks,
+ false)))
goto error;
virObjectLock(test->agent);