diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c index f9bcf38dfb..22359f8518 100644 --- a/src/qemu/qemu_agent.c +++ b/src/qemu/qemu_agent.c @@ -835,6 +835,7 @@ qemuAgentGuestSyncSend(qemuAgent *agent, /** * qemuAgentGuestSync: * @agent: agent object + * @seconds: qemu agent command timeout value * * Send guest-sync with unique ID * and wait for reply. If we get one, check if @@ -844,9 +845,10 @@ qemuAgentGuestSyncSend(qemuAgent *agent, * -1 otherwise */ static int -qemuAgentGuestSync(qemuAgent *agent) +qemuAgentGuestSync(qemuAgent *agent, + int seconds) { - int timeout = VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT; + int timeout = QEMU_AGENT_WAIT_TIME; int rc; if (agent->inSync) @@ -854,9 +856,15 @@ qemuAgentGuestSync(qemuAgent *agent) /* 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 < QEMU_AGENT_WAIT_TIME)) + if ((agent->timeout >= 0) && (agent->timeout < timeout)) timeout = agent->timeout; + /* If user specified a timeout parameter smaller than both default + * value and agent->timeout in qga APIs(such as qemu-agent-command), + * use the parameter timeout value */ + if ((seconds >= 0) && (seconds < timeout)) + timeout = seconds; + if ((rc = qemuAgentGuestSyncSend(agent, timeout, true)) < 0) return -1; @@ -1022,7 +1030,7 @@ qemuAgentCommandFull(qemuAgent *agent, goto cleanup; } - if (qemuAgentGuestSync(agent) < 0) + if (qemuAgentGuestSync(agent, seconds) < 0) goto cleanup; if (!(cmdstr = virJSONValueToString(cmd, false)))