static int qemuAgentCommand(qemuAgentPtr mon, virJSONValuePtr cmd, virJSONValuePtr *reply, int seconds) { int ret = -1; qemuAgentMessage msg; char *cmdstr = NULL; int await_event = mon->await_event; *reply = NULL; if (qemuAgentGuestSync(mon) < 0) { /* helper reported the error */ return -1; } memset(&msg, 0, sizeof(msg)); if (!(cmdstr = virJSONValueToString(cmd, false))) { virReportOOMError(); goto cleanup; } if (virAsprintf(&msg.txBuffer, "%s" LINE_ENDING, cmdstr) < 0) { virReportOOMError(); goto cleanup; } msg.txLength = strlen(msg.txBuffer); VIR_DEBUG("Send command '%s' for write, seconds = %d", cmdstr, seconds); ret = qemuAgentSend(mon, &msg, seconds); VIR_DEBUG("Receive command reply ret=%d rxObject=%p", ret, msg.rxObject); if (ret == 0) { /* If we haven't obtained any reply but we wait for an * event, then don't report this as error */ if (!msg.rxObject) { if (await_event) { VIR_DEBUG("Woken up by event %d", await_event); } else { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing monitor reply object")); ret = -1; } } else { *reply = msg.rxObject; } } cleanup: VIR_FREE(cmdstr); VIR_FREE(msg.txBuffer); return ret; }
static int qemuAgentCommand(qemuAgentPtr mon, virJSONValuePtr cmd, virJSONValuePtr *reply) { int ret = -1; qemuAgentMessage msg; char *cmdstr = NULL; *reply = NULL; if (qemuAgentGuestSync(mon) < 0) { /* helper reported the error */ return -1; } memset(&msg, 0, sizeof(msg)); if (!(cmdstr = virJSONValueToString(cmd))) { virReportOOMError(); goto cleanup; } if (virAsprintf(&msg.txBuffer, "%s" LINE_ENDING, cmdstr) < 0) { virReportOOMError(); goto cleanup; } msg.txLength = strlen(msg.txBuffer); VIR_DEBUG("Send command '%s' for write", cmdstr); ret = qemuAgentSend(mon, &msg, false); VIR_DEBUG("Receive command reply ret=%d rxObject=%p", ret, msg.rxObject); if (ret == 0) { if (!msg.rxObject) { qemuReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Missing monitor reply object")); ret = -1; } else { *reply = msg.rxObject; } } cleanup: VIR_FREE(cmdstr); VIR_FREE(msg.txBuffer); return ret; }