qemu_process: Hide qmperr inside qemuProcessQMP

Keep the pointer to QEMU stderr output in qemuProcessQMP struct instead
of requiring the caller to provide it (and free it).

Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Jiri Denemark 2019-02-12 15:00:42 +01:00
parent b459fde50b
commit 09d7daf380
3 changed files with 9 additions and 17 deletions

View File

@ -4376,14 +4376,13 @@ virQEMUCapsInitQMPSingle(virQEMUCapsPtr qemuCaps,
const char *libDir, const char *libDir,
uid_t runUid, uid_t runUid,
gid_t runGid, gid_t runGid,
char **qmperr,
bool onlyTCG) bool onlyTCG)
{ {
qemuProcessQMPPtr proc = NULL; qemuProcessQMPPtr proc = NULL;
int ret = -1; int ret = -1;
if (!(proc = qemuProcessQMPNew(qemuCaps->binary, libDir, if (!(proc = qemuProcessQMPNew(qemuCaps->binary, libDir,
runUid, runGid, qmperr, onlyTCG))) runUid, runGid, onlyTCG)))
goto cleanup; goto cleanup;
if (qemuProcessQMPRun(proc) < 0) if (qemuProcessQMPRun(proc) < 0)
@ -4408,10 +4407,9 @@ static int
virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps, virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
const char *libDir, const char *libDir,
uid_t runUid, uid_t runUid,
gid_t runGid, gid_t runGid)
char **qmperr)
{ {
if (virQEMUCapsInitQMPSingle(qemuCaps, libDir, runUid, runGid, qmperr, false) < 0) if (virQEMUCapsInitQMPSingle(qemuCaps, libDir, runUid, runGid, false) < 0)
return -1; return -1;
/* /*
@ -4420,7 +4418,7 @@ virQEMUCapsInitQMP(virQEMUCapsPtr qemuCaps,
* off. * off.
*/ */
if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) && if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) &&
virQEMUCapsInitQMPSingle(qemuCaps, libDir, runUid, runGid, NULL, true) < 0) virQEMUCapsInitQMPSingle(qemuCaps, libDir, runUid, runGid, true) < 0)
return -1; return -1;
return 0; return 0;
@ -4438,7 +4436,6 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
{ {
virQEMUCapsPtr qemuCaps; virQEMUCapsPtr qemuCaps;
struct stat sb; struct stat sb;
char *qmperr = NULL;
if (!(qemuCaps = virQEMUCapsNew())) if (!(qemuCaps = virQEMUCapsNew()))
goto error; goto error;
@ -4465,7 +4462,7 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
goto error; goto error;
} }
if (virQEMUCapsInitQMP(qemuCaps, libDir, runUid, runGid, &qmperr) < 0) if (virQEMUCapsInitQMP(qemuCaps, libDir, runUid, runGid) < 0)
goto error; goto error;
qemuCaps->libvirtCtime = virGetSelfLastChanged(); qemuCaps->libvirtCtime = virGetSelfLastChanged();
@ -4484,7 +4481,6 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch,
} }
cleanup: cleanup:
VIR_FREE(qmperr);
return qemuCaps; return qemuCaps;
error: error:

View File

@ -8335,6 +8335,7 @@ qemuProcessQMPFree(qemuProcessQMPPtr proc)
VIR_FREE(proc->monpath); VIR_FREE(proc->monpath);
VIR_FREE(proc->monarg); VIR_FREE(proc->monarg);
VIR_FREE(proc->pidfile); VIR_FREE(proc->pidfile);
VIR_FREE(proc->stderr);
VIR_FREE(proc); VIR_FREE(proc);
} }
@ -8344,7 +8345,6 @@ qemuProcessQMPNew(const char *binary,
const char *libDir, const char *libDir,
uid_t runUid, uid_t runUid,
gid_t runGid, gid_t runGid,
char **qmperr,
bool forceTCG) bool forceTCG)
{ {
qemuProcessQMPPtr proc = NULL; qemuProcessQMPPtr proc = NULL;
@ -8357,7 +8357,6 @@ qemuProcessQMPNew(const char *binary,
proc->runUid = runUid; proc->runUid = runUid;
proc->runGid = runGid; proc->runGid = runGid;
proc->qmperr = qmperr;
proc->forceTCG = forceTCG; proc->forceTCG = forceTCG;
/* the ".sock" sufix is important to avoid a possible clash with a qemu /* the ".sock" sufix is important to avoid a possible clash with a qemu
@ -8439,7 +8438,7 @@ qemuProcessQMPRun(qemuProcessQMPPtr proc)
virCommandSetGID(proc->cmd, proc->runGid); virCommandSetGID(proc->cmd, proc->runGid);
virCommandSetUID(proc->cmd, proc->runUid); virCommandSetUID(proc->cmd, proc->runUid);
virCommandSetErrorBuffer(proc->cmd, proc->qmperr); virCommandSetErrorBuffer(proc->cmd, &(proc->stderr));
if (virCommandRun(proc->cmd, &status) < 0) if (virCommandRun(proc->cmd, &status) < 0)
goto cleanup; goto cleanup;
@ -8449,7 +8448,7 @@ qemuProcessQMPRun(qemuProcessQMPPtr proc)
virReportError(VIR_ERR_INTERNAL_ERROR, virReportError(VIR_ERR_INTERNAL_ERROR,
_("Failed to start QEMU binary %s for probing: %s"), _("Failed to start QEMU binary %s for probing: %s"),
proc->binary, proc->binary,
*proc->qmperr ? *proc->qmperr : _("unknown error")); proc->stderr ? proc->stderr : _("unknown error"));
goto cleanup; goto cleanup;
} }
@ -8513,8 +8512,6 @@ qemuProcessQMPStop(qemuProcessQMPPtr proc)
(long long)proc->pid, (long long)proc->pid,
virStrerror(errno, ebuf, sizeof(ebuf))); virStrerror(errno, ebuf, sizeof(ebuf)));
VIR_FREE(*proc->qmperr);
proc->pid = 0; proc->pid = 0;
} }

View File

@ -220,7 +220,7 @@ struct _qemuProcessQMP {
char *binary; char *binary;
uid_t runUid; uid_t runUid;
gid_t runGid; gid_t runGid;
char **qmperr; char *stderr;
char *monarg; char *monarg;
char *monpath; char *monpath;
char *pidfile; char *pidfile;
@ -236,7 +236,6 @@ qemuProcessQMPPtr qemuProcessQMPNew(const char *binary,
const char *libDir, const char *libDir,
uid_t runUid, uid_t runUid,
gid_t runGid, gid_t runGid,
char **qmperr,
bool forceTCG); bool forceTCG);
void qemuProcessQMPFree(qemuProcessQMPPtr proc); void qemuProcessQMPFree(qemuProcessQMPPtr proc);