[libvirt] [PATCH v5 0/5] qemu_process: Glib sponsored cleanup

changes from previous version 4 [1]: - patch 1: * moved 'dev' inside the for loop in qemuProcessHandleBlockThreshold() * moved 'id' inside the 'for' loop in qemuProcessLookupPTYs() * moved 'path' inside both conditionals in qemuProcessBuildDestroyMemoryPaths() * set 'template=NULL' in case g_mkdtemp() succeeds in qemuProcessQMPInit() - patch 2: new patch. add g_autoptr() support for qemuDomainLogContextPtr - patch 3: * using g_autoptr() on feasible virCommandPtr and * qemuDomainLogContextPtr [1] https://www.redhat.com/archives/libvir-list/2019-December/msg01311.html Daniel Henrique Barboza (5): qemu_process.c: use g_autofree qemu_domain.h: add G_DEFINE_AUTOPTR_CLEANUP_FUNC for qemuDomainLogContext qemu_process.c: use g_autoptr() qemu_process.c: remove cleanup labels after g_auto*() changes qemu_process.c: remove 'cleanup' label from qemuProcessCreatePretendCmd() src/qemu/qemu_domain.h | 1 + src/qemu/qemu_process.c | 445 +++++++++++++++------------------------- 2 files changed, 166 insertions(+), 280 deletions(-) -- 2.24.1

Change all feasible strings and scalar pointers to use g_autofree. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- src/qemu/qemu_process.c | 103 +++++++++++++++------------------------- 1 file changed, 38 insertions(+), 65 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 7e1db50e8f..bd51b1de25 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -105,7 +105,7 @@ qemuProcessRemoveDomainStatus(virQEMUDriverPtr driver, virDomainObjPtr vm) { char ebuf[1024]; - char *file = NULL; + g_autofree char *file = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); @@ -114,7 +114,6 @@ qemuProcessRemoveDomainStatus(virQEMUDriverPtr driver, if (unlink(file) < 0 && errno != ENOENT && errno != ENOTDIR) VIR_WARN("Failed to remove domain XML for %s: %s", vm->def->name, virStrerror(errno, ebuf, sizeof(ebuf))); - VIR_FREE(file); if (priv->pidfile && unlink(priv->pidfile) < 0 && @@ -1501,7 +1500,6 @@ qemuProcessHandleBlockThreshold(qemuMonitorPtr mon G_GNUC_UNUSED, virDomainDiskDefPtr disk; virStorageSourcePtr src; unsigned int idx; - char *dev = NULL; const char *path = NULL; virObjectLock(vm); @@ -1511,14 +1509,13 @@ qemuProcessHandleBlockThreshold(qemuMonitorPtr mon G_GNUC_UNUSED, nodename, vm, vm->def->name, threshold, excess); if ((disk = qemuDomainDiskLookupByNodename(vm->def, nodename, &src, &idx))) { + g_autofree char *dev = NULL; if (virStorageSourceIsLocalStorage(src)) path = src->path; - if ((dev = qemuDomainDiskBackingStoreGetName(disk, src, idx))) { + if ((dev = qemuDomainDiskBackingStoreGetName(disk, src, idx))) event = virDomainEventBlockThresholdNewFromObj(vm, dev, path, threshold, excess); - VIR_FREE(dev); - } } virObjectUnlock(vm); @@ -2052,7 +2049,7 @@ static int qemuProcessReportLogError(qemuDomainLogContextPtr logCtxt, const char *msgprefix) { - char *logmsg = NULL; + g_autofree char *logmsg = NULL; size_t max; max = VIR_ERROR_MAX_LENGTH - 1; @@ -2069,7 +2066,6 @@ qemuProcessReportLogError(qemuDomainLogContextPtr logCtxt, else virReportError(VIR_ERR_INTERNAL_ERROR, _("%s: %s"), msgprefix, logmsg); - VIR_FREE(logmsg); return 0; } @@ -2089,16 +2085,15 @@ qemuProcessLookupPTYs(virDomainChrDefPtr *devices, int count, virHashTablePtr info) { - char *id = NULL; size_t i; int ret = -1; for (i = 0; i < count; i++) { + g_autofree char *id = NULL; virDomainChrDefPtr chr = devices[i]; if (chr->source->type == VIR_DOMAIN_CHR_TYPE_PTY) { qemuMonitorChardevInfoPtr entry; - VIR_FREE(id); id = g_strdup_printf("char%s", chr->info.alias); entry = virHashLookup(info, id); @@ -2118,14 +2113,13 @@ qemuProcessLookupPTYs(virDomainChrDefPtr *devices, } } - VIR_FREE(chr->source->data.file.path); + g_free(chr->source->data.file.path); chr->source->data.file.path = g_strdup(entry->ptyPath); } } ret = 0; cleanup: - VIR_FREE(id); return ret; } @@ -2178,7 +2172,7 @@ qemuProcessRefreshChannelVirtioState(virQEMUDriverPtr driver, int agentReason = VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_REASON_CHANNEL; qemuMonitorChardevInfoPtr entry; virObjectEventPtr event = NULL; - char *id = NULL; + g_autofree char *id = NULL; if (booted) agentReason = VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_REASON_DOMAIN_STARTED; @@ -2204,8 +2198,6 @@ qemuProcessRefreshChannelVirtioState(virQEMUDriverPtr driver, chr->state = entry->state; } } - - VIR_FREE(id); } @@ -2622,7 +2614,7 @@ qemuProcessSetupPid(virDomainObjPtr vm, virBitmapPtr use_cpumask = NULL; virBitmapPtr afinity_cpumask = NULL; g_autoptr(virBitmap) hostcpumap = NULL; - char *mem_mask = NULL; + g_autofree char *mem_mask = NULL; int ret = -1; if ((period || quota) && @@ -2702,7 +2694,6 @@ qemuProcessSetupPid(virDomainObjPtr vm, ret = 0; cleanup: - VIR_FREE(mem_mask); if (cgroup) { if (ret < 0) virCgroupRemove(cgroup); @@ -2781,7 +2772,7 @@ qemuProcessKillManagedPRDaemon(virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; virErrorPtr orig_err; - char *pidfile; + g_autofree char *pidfile = NULL; if (!(pidfile = qemuProcessBuildPRHelperPidfilePath(vm))) { VIR_WARN("Unable to construct pr-helper pidfile path"); @@ -2802,8 +2793,6 @@ qemuProcessKillManagedPRDaemon(virDomainObjPtr vm) } } virErrorRestore(&orig_err); - - VIR_FREE(pidfile); } @@ -2812,7 +2801,7 @@ qemuProcessStartPRDaemonHook(void *opaque) { virDomainObjPtr vm = opaque; size_t i, nfds = 0; - int *fds = NULL; + g_autofree int *fds = NULL; int ret = -1; if (qemuDomainNamespaceEnabled(vm, QEMU_DOMAIN_NS_MOUNT)) { @@ -2828,7 +2817,6 @@ qemuProcessStartPRDaemonHook(void *opaque) cleanup: for (i = 0; i < nfds; i++) VIR_FORCE_CLOSE(fds[i]); - VIR_FREE(fds); return ret; } @@ -2840,9 +2828,9 @@ qemuProcessStartManagedPRDaemon(virDomainObjPtr vm) virQEMUDriverPtr driver = priv->driver; virQEMUDriverConfigPtr cfg; int errfd = -1; - char *pidfile = NULL; + g_autofree char *pidfile = NULL; int pidfd = -1; - char *socketPath = NULL; + g_autofree char *socketPath = NULL; pid_t cpid = -1; virCommandPtr cmd = NULL; virTimeBackOffVar timebackoff; @@ -2948,9 +2936,7 @@ qemuProcessStartManagedPRDaemon(virDomainObjPtr vm) unlink(pidfile); } virCommandFree(cmd); - VIR_FREE(socketPath); VIR_FORCE_CLOSE(pidfd); - VIR_FREE(pidfile); VIR_FORCE_CLOSE(errfd); virObjectUnref(cfg); return ret; @@ -3366,7 +3352,7 @@ qemuProcessUpdateState(virQEMUDriverPtr driver, virDomainObjPtr vm) int oldReason; int newReason; bool running; - char *msg = NULL; + g_autofree char *msg = NULL; int ret; qemuDomainObjEnterMonitor(driver, vm); @@ -3414,7 +3400,6 @@ qemuProcessUpdateState(virQEMUDriverPtr driver, virDomainObjPtr vm) NULLSTR(msg), virDomainStateTypeToString(newState), virDomainStateReasonToString(newState, newReason)); - VIR_FREE(msg); virDomainObjSetState(vm, newState, newReason); } @@ -3879,7 +3864,6 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver, bool build) { virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - char *path = NULL; size_t i; bool shouldBuildHP = false; bool shouldBuildMB = false; @@ -3892,6 +3876,7 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver, if (!build || shouldBuildHP) { for (i = 0; i < cfg->nhugetlbfs; i++) { + g_autofree char *path = NULL; path = qemuGetDomainHugepagePath(vm->def, &cfg->hugetlbfs[i]); if (!path) @@ -3900,25 +3885,21 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver, if (qemuProcessBuildDestroyMemoryPathsImpl(driver, vm, path, build) < 0) goto cleanup; - - VIR_FREE(path); } } if (!build || shouldBuildMB) { + g_autofree char *path = NULL; if (qemuGetMemoryBackingDomainPath(vm->def, cfg, &path) < 0) goto cleanup; if (qemuProcessBuildDestroyMemoryPathsImpl(driver, vm, path, build) < 0) goto cleanup; - - VIR_FREE(path); } ret = 0; cleanup: - VIR_FREE(path); virObjectUnref(cfg); return ret; } @@ -3930,7 +3911,7 @@ qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver, virDomainMemoryDefPtr mem) { virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - char *path = NULL; + g_autofree char *path = NULL; int ret = -1; if (qemuGetMemoryBackingPath(vm->def, cfg, mem->info.alias, &path) < 0) @@ -3944,7 +3925,6 @@ qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver, ret = 0; cleanup: - VIR_FREE(path); virObjectUnref(cfg); return ret; } @@ -4079,11 +4059,12 @@ static int qemuProcessVerifyHypervFeatures(virDomainDefPtr def, virCPUDataPtr cpu) { - char *cpuFeature; size_t i; int rc; for (i = 0; i < VIR_DOMAIN_HYPERV_LAST; i++) { + g_autofree char *cpuFeature = NULL; + /* always supported string property */ if (i == VIR_DOMAIN_HYPERV_VENDOR_ID || i == VIR_DOMAIN_HYPERV_SPINLOCKS) @@ -4095,7 +4076,6 @@ qemuProcessVerifyHypervFeatures(virDomainDefPtr def, cpuFeature = g_strdup_printf("hv-%s", virDomainHypervTypeToString(i)); rc = virCPUDataCheckFeature(cpu, cpuFeature); - VIR_FREE(cpuFeature); if (rc < 0) { return -1; @@ -4518,17 +4498,17 @@ qemuLogOperation(virDomainObjPtr vm, virCommandPtr cmd, qemuDomainLogContextPtr logCtxt) { - char *timestamp; + g_autofree char *timestamp = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; int qemuVersion = virQEMUCapsGetVersion(priv->qemuCaps); const char *package = virQEMUCapsGetPackage(priv->qemuCaps); - char *hostname = virGetHostname(); + g_autofree char *hostname = virGetHostname(); struct utsname uts; uname(&uts); if ((timestamp = virTimeStringNow()) == NULL) - goto cleanup; + return; if (qemuDomainLogContextWrite(logCtxt, "%s: %s %s, qemu version: %d.%d.%d%s, kernel: %s, hostname: %s\n", @@ -4539,17 +4519,12 @@ qemuLogOperation(virDomainObjPtr vm, NULLSTR_EMPTY(package), uts.release, NULLSTR_EMPTY(hostname)) < 0) - goto cleanup; + return; if (cmd) { - char *args = virCommandToString(cmd, true); + g_autofree char *args = virCommandToString(cmd, true); qemuDomainLogContextWrite(logCtxt, "%s\n", args); - VIR_FREE(args); } - - cleanup: - VIR_FREE(hostname); - VIR_FREE(timestamp); } @@ -4647,7 +4622,7 @@ qemuProcessStartHook(virQEMUDriverPtr driver, virHookSubopType subop) { qemuDomainObjPrivatePtr priv = vm->privateData; - char *xml; + g_autofree char *xml = NULL; int ret; if (!virHookPresent(VIR_HOOK_DRIVER_QEMU)) @@ -4658,7 +4633,6 @@ qemuProcessStartHook(virQEMUDriverPtr driver, ret = virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, op, subop, NULL, xml, NULL); - VIR_FREE(xml); return ret; } @@ -4771,7 +4745,7 @@ qemuProcessGetNetworkAddress(const char *netname, virSocketAddr addr; virSocketAddrPtr addrptr = NULL; char *dev_name = NULL; - char *xml = NULL; + g_autofree char *xml = NULL; *netaddr = NULL; @@ -4853,7 +4827,6 @@ qemuProcessGetNetworkAddress(const char *netname, virNetworkDefFree(netdef); virObjectUnref(net); virObjectUnref(conn); - VIR_FREE(xml); return ret; } @@ -6392,7 +6365,7 @@ qemuProcessSEVCreateFile(virDomainObjPtr vm, { qemuDomainObjPrivatePtr priv = vm->privateData; virQEMUDriverPtr driver = priv->driver; - char *configFile; + g_autofree char *configFile = NULL; int ret = -1; if (!(configFile = virFileBuildPath(priv->libDir, name, ".base64"))) @@ -6409,7 +6382,6 @@ qemuProcessSEVCreateFile(virDomainObjPtr vm, ret = 0; cleanup: - VIR_FREE(configFile); return ret; } @@ -6746,7 +6718,7 @@ qemuProcessLaunch(virConnectPtr conn, struct qemuProcessHookData hookData; virQEMUDriverConfigPtr cfg; size_t nnicindexes = 0; - int *nicindexes = NULL; + g_autofree int *nicindexes = NULL; size_t i; VIR_DEBUG("conn=%p driver=%p vm=%p name=%s if=%d asyncJob=%d " @@ -7053,7 +7025,6 @@ qemuProcessLaunch(virConnectPtr conn, virCommandFree(cmd); virObjectUnref(logCtxt); virObjectUnref(cfg); - VIR_FREE(nicindexes); return ret; } @@ -7374,7 +7345,7 @@ void qemuProcessStop(virQEMUDriverPtr driver, virDomainDefPtr def = vm->def; const virNetDevVPortProfile *vport = NULL; size_t i; - char *timestamp; + g_autofree char *timestamp = NULL; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); virConnectPtr conn = NULL; @@ -7417,7 +7388,6 @@ void qemuProcessStop(virQEMUDriverPtr driver, qemuDomainLogAppendMessage(driver, vm, "%s: shutting down, reason=%s\n", timestamp, virDomainShutoffReasonTypeToString(reason)); - VIR_FREE(timestamp); } /* Clear network bandwidth */ @@ -7488,13 +7458,12 @@ void qemuProcessStop(virQEMUDriverPtr driver, /* now that we know it's stopped call the hook if present */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = qemuDomainDefFormatXML(driver, NULL, vm->def, 0); + g_autofree char *xml = qemuDomainDefFormatXML(driver, NULL, vm->def, 0); /* we can't stop the operation even if the script raised an error */ ignore_value(virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, VIR_HOOK_QEMU_OP_STOPPED, VIR_HOOK_SUBOP_END, NULL, xml, NULL)); - VIR_FREE(xml); } /* Reset Security Labels unless caller don't want us to */ @@ -7677,13 +7646,12 @@ void qemuProcessStop(virQEMUDriverPtr driver, /* The "release" hook cleans up additional resources */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = qemuDomainDefFormatXML(driver, NULL, vm->def, 0); + g_autofree char *xml = qemuDomainDefFormatXML(driver, NULL, vm->def, 0); /* we can't stop the operation even if the script raised an error */ virHookCall(VIR_HOOK_DRIVER_QEMU, vm->def->name, VIR_HOOK_QEMU_OP_RELEASE, VIR_HOOK_SUBOP_END, NULL, xml, NULL); - VIR_FREE(xml); } virDomainObjRemoveTransientDef(vm); @@ -8228,13 +8196,14 @@ qemuProcessReconnect(void *opaque) /* Run an hook to allow admins to do some magic */ if (virHookPresent(VIR_HOOK_DRIVER_QEMU)) { - char *xml = qemuDomainDefFormatXML(driver, priv->qemuCaps, obj->def, 0); + g_autofree char *xml = qemuDomainDefFormatXML(driver, + priv->qemuCaps, + obj->def, 0); int hookret; hookret = virHookCall(VIR_HOOK_DRIVER_QEMU, obj->def->name, VIR_HOOK_QEMU_OP_RECONNECT, VIR_HOOK_SUBOP_BEGIN, NULL, xml, NULL); - VIR_FREE(xml); /* * If the script raised an error abort the launch @@ -8489,7 +8458,7 @@ qemuProcessQEMULabelUniqPath(qemuProcessQMPPtr proc) static int qemuProcessQMPInit(qemuProcessQMPPtr proc) { - char *template = NULL; + g_autofree char *template = NULL; VIR_DEBUG("proc=%p, emulator=%s", proc, proc->binary); @@ -8502,6 +8471,10 @@ qemuProcessQMPInit(qemuProcessQMPPtr proc) template); return -1; } + /* if g_mkdtemp succeeds, proc->uniqDir is now the owner of + * the string. Set template to NULL to avoid freeing + * the memory in this case */ + template = NULL; if (qemuProcessQEMULabelUniqPath(proc) < 0) return -1; -- 2.24.1

This will allow us to g_autoptr qemuDomainLogContext pointers in the following patch. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- src/qemu/qemu_domain.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h index a32852047c..7a86818cbb 100644 --- a/src/qemu/qemu_domain.h +++ b/src/qemu/qemu_domain.h @@ -586,6 +586,7 @@ void qemuProcessEventFree(struct qemuProcessEvent *event); typedef struct _qemuDomainLogContext qemuDomainLogContext; typedef qemuDomainLogContext *qemuDomainLogContextPtr; +G_DEFINE_AUTOPTR_CLEANUP_FUNC(qemuDomainLogContext, virObjectUnref); typedef struct _qemuDomainSaveCookie qemuDomainSaveCookie; typedef qemuDomainSaveCookie *qemuDomainSaveCookiePtr; -- 2.24.1

Change all feasible pointers to use g_autoptr(). Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- src/qemu/qemu_process.c | 123 ++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 82 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index bd51b1de25..c30084bec3 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -107,7 +107,7 @@ qemuProcessRemoveDomainStatus(virQEMUDriverPtr driver, char ebuf[1024]; g_autofree char *file = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); file = g_strdup_printf("%s/%s.xml", cfg->stateDir, vm->def->name); @@ -120,8 +120,6 @@ qemuProcessRemoveDomainStatus(virQEMUDriverPtr driver, errno != ENOENT) VIR_WARN("Failed to remove PID file for %s: %s", vm->def->name, virStrerror(errno, ebuf, sizeof(ebuf))); - - virObjectUnref(cfg); } @@ -401,7 +399,7 @@ qemuProcessHandleReset(qemuMonitorPtr mon G_GNUC_UNUSED, virQEMUDriverPtr driver = opaque; virObjectEventPtr event; qemuDomainObjPrivatePtr priv; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); int ret = -1; virObjectLock(vm); @@ -438,7 +436,6 @@ qemuProcessHandleReset(qemuMonitorPtr mon G_GNUC_UNUSED, cleanup: virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return ret; } @@ -457,7 +454,7 @@ qemuProcessFakeReboot(void *opaque) virDomainObjPtr vm = opaque; qemuDomainObjPrivatePtr priv = vm->privateData; virQEMUDriverPtr driver = priv->driver; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virDomainRunningReason reason = VIR_DOMAIN_RUNNING_BOOTED; int ret = -1, rc; @@ -507,7 +504,6 @@ qemuProcessFakeReboot(void *opaque) if (ret == -1) ignore_value(qemuProcessKill(vm, VIR_QEMU_PROCESS_KILL_FORCE)); virDomainObjEndAPI(&vm); - virObjectUnref(cfg); } @@ -570,7 +566,7 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon G_GNUC_UNUSED, virQEMUDriverPtr driver = opaque; qemuDomainObjPrivatePtr priv; virObjectEventPtr event = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); int detail = 0; VIR_DEBUG("vm=%p", vm); @@ -627,7 +623,6 @@ qemuProcessHandleShutdown(qemuMonitorPtr mon G_GNUC_UNUSED, unlock: virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return 0; } @@ -642,7 +637,7 @@ qemuProcessHandleStop(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectEventPtr event = NULL; virDomainPausedReason reason; virDomainEventSuspendedDetailType detail; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); qemuDomainObjPrivatePtr priv = vm->privateData; virObjectLock(vm); @@ -688,7 +683,6 @@ qemuProcessHandleStop(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return 0; } @@ -701,7 +695,7 @@ qemuProcessHandleResume(qemuMonitorPtr mon G_GNUC_UNUSED, { virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); qemuDomainObjPrivatePtr priv; virDomainRunningReason reason = VIR_DOMAIN_RUNNING_UNPAUSED; virDomainEventResumedDetailType eventDetail; @@ -734,7 +728,6 @@ qemuProcessHandleResume(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return 0; } @@ -746,7 +739,7 @@ qemuProcessHandleRTCChange(qemuMonitorPtr mon G_GNUC_UNUSED, { virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); @@ -778,7 +771,6 @@ qemuProcessHandleRTCChange(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return 0; } @@ -792,7 +784,7 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon G_GNUC_UNUSED, virQEMUDriverPtr driver = opaque; virObjectEventPtr watchdogEvent = NULL; virObjectEventPtr lifecycleEvent = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); watchdogEvent = virDomainEventWatchdogNewFromObj(vm, action); @@ -840,7 +832,6 @@ qemuProcessHandleWatchdog(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectEventStateQueue(driver->domainEventState, watchdogEvent); virObjectEventStateQueue(driver->domainEventState, lifecycleEvent); - virObjectUnref(cfg); return 0; } @@ -861,7 +852,7 @@ qemuProcessHandleIOError(qemuMonitorPtr mon G_GNUC_UNUSED, const char *srcPath; const char *devAlias; virDomainDiskDefPtr disk; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); @@ -912,7 +903,6 @@ qemuProcessHandleIOError(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectEventStateQueue(driver->domainEventState, ioErrorEvent); virObjectEventStateQueue(driver->domainEventState, ioErrorEvent2); virObjectEventStateQueue(driver->domainEventState, lifecycleEvent); - virObjectUnref(cfg); return 0; } @@ -1136,7 +1126,7 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon G_GNUC_UNUSED, virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; virDomainDiskDefPtr disk; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); disk = qemuProcessFindDomainDiskByAliasOrQOM(vm, devAlias, devid); @@ -1159,7 +1149,6 @@ qemuProcessHandleTrayChange(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return 0; } @@ -1171,7 +1160,7 @@ qemuProcessHandlePMWakeup(qemuMonitorPtr mon G_GNUC_UNUSED, virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; virObjectEventPtr lifecycleEvent = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); event = virDomainEventPMWakeupNewFromObj(vm); @@ -1198,7 +1187,6 @@ qemuProcessHandlePMWakeup(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); virObjectEventStateQueue(driver->domainEventState, lifecycleEvent); - virObjectUnref(cfg); return 0; } @@ -1210,7 +1198,7 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon G_GNUC_UNUSED, virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; virObjectEventPtr lifecycleEvent = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); event = virDomainEventPMSuspendNewFromObj(vm); @@ -1240,7 +1228,6 @@ qemuProcessHandlePMSuspend(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectEventStateQueue(driver->domainEventState, event); virObjectEventStateQueue(driver->domainEventState, lifecycleEvent); - virObjectUnref(cfg); return 0; } @@ -1252,7 +1239,7 @@ qemuProcessHandleBalloonChange(qemuMonitorPtr mon G_GNUC_UNUSED, { virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); event = virDomainEventBalloonChangeNewFromObj(vm, actual); @@ -1267,7 +1254,6 @@ qemuProcessHandleBalloonChange(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return 0; } @@ -1279,7 +1265,7 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon G_GNUC_UNUSED, virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; virObjectEventPtr lifecycleEvent = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); virObjectLock(vm); event = virDomainEventPMSuspendDiskNewFromObj(vm); @@ -1309,7 +1295,6 @@ qemuProcessHandlePMSuspendDisk(qemuMonitorPtr mon G_GNUC_UNUSED, virObjectEventStateQueue(driver->domainEventState, event); virObjectEventStateQueue(driver->domainEventState, lifecycleEvent); - virObjectUnref(cfg); return 0; } @@ -1637,7 +1622,7 @@ qemuProcessHandleMigrationStatus(qemuMonitorPtr mon G_GNUC_UNUSED, qemuDomainObjPrivatePtr priv; virQEMUDriverPtr driver = opaque; virObjectEventPtr event = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); int reason; virObjectLock(vm); @@ -1676,7 +1661,6 @@ qemuProcessHandleMigrationStatus(qemuMonitorPtr mon G_GNUC_UNUSED, cleanup: virObjectUnlock(vm); virObjectEventStateQueue(driver->domainEventState, event); - virObjectUnref(cfg); return 0; } @@ -2721,7 +2705,7 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver, { int ret = -1; size_t i = 0; - virCapsPtr caps = NULL; + g_autoptr(virCaps) caps = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; if (!vm->def->nresctrls) @@ -2752,7 +2736,6 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(caps); return ret; } @@ -2826,13 +2809,13 @@ qemuProcessStartManagedPRDaemon(virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; virQEMUDriverPtr driver = priv->driver; - virQEMUDriverConfigPtr cfg; + g_autoptr(virQEMUDriverConfig) cfg = NULL; int errfd = -1; g_autofree char *pidfile = NULL; int pidfd = -1; g_autofree char *socketPath = NULL; pid_t cpid = -1; - virCommandPtr cmd = NULL; + g_autoptr(virCommand) cmd = NULL; virTimeBackOffVar timebackoff; const unsigned long long timeout = 500000; /* ms */ int ret = -1; @@ -2935,10 +2918,8 @@ qemuProcessStartManagedPRDaemon(virDomainObjPtr vm) if (pidfile) unlink(pidfile); } - virCommandFree(cmd); VIR_FORCE_CLOSE(pidfd); VIR_FORCE_CLOSE(errfd); - virObjectUnref(cfg); return ret; } @@ -2949,7 +2930,7 @@ qemuProcessInitPasswords(virQEMUDriverPtr driver, int asyncJob) { int ret = 0; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); size_t i; for (i = 0; i < vm->def->ngraphics; ++i) { @@ -2973,7 +2954,6 @@ qemuProcessInitPasswords(virQEMUDriverPtr driver, } cleanup: - virObjectUnref(cfg); return ret; } @@ -3034,7 +3014,7 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver, ssize_t i; qemuDomainObjPrivatePtr priv = vm->privateData; virDomainVideoDefPtr video = NULL; - virQEMUDriverConfigPtr cfg = NULL; + g_autoptr(virQEMUDriverConfig) cfg = NULL; if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) return -1; @@ -3093,7 +3073,6 @@ qemuProcessUpdateVideoRamSize(virQEMUDriverPtr driver, cfg = virQEMUDriverGetConfig(driver); ret = virDomainObjSave(vm, driver->xmlopt, cfg->stateDir); - virObjectUnref(cfg); return ret; @@ -3198,7 +3177,7 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, { int ret = -1; qemuDomainObjPrivatePtr priv = vm->privateData; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); /* Bring up netdevs before starting CPUs */ if (qemuInterfaceStartDevices(vm->def) < 0) @@ -3233,7 +3212,6 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, */ cleanup: - virObjectUnref(cfg); return ret; release: @@ -3295,7 +3273,7 @@ static void qemuProcessNotifyNets(virDomainDefPtr def) { size_t i; - virConnectPtr conn = NULL; + g_autoptr(virConnect) conn = NULL; for (i = 0; i < def->nnets; i++) { virDomainNetDefPtr net = def->nets[i]; @@ -3313,8 +3291,6 @@ qemuProcessNotifyNets(virDomainDefPtr def) virDomainNetNotifyActualDevice(conn, def, net); } } - - virObjectUnref(conn); } /* Attempt to instantiate the filters. Ignore failures because it's @@ -3863,7 +3839,8 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver, virDomainMemoryDefPtr mem, bool build) { - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); size_t i; bool shouldBuildHP = false; bool shouldBuildMB = false; @@ -3900,7 +3877,6 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } @@ -3910,7 +3886,7 @@ qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver, virDomainObjPtr vm, virDomainMemoryDefPtr mem) { - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); g_autofree char *path = NULL; int ret = -1; @@ -3925,7 +3901,6 @@ qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } @@ -3965,7 +3940,7 @@ qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver, virDomainGraphicsDefPtr graphics, bool allocate) { - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); unsigned short port = 0; unsigned short tlsPort; size_t i; @@ -4050,7 +4025,6 @@ qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } @@ -4340,7 +4314,7 @@ qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, virDomainCapsCPUModelsPtr *cpuModels) { qemuDomainObjPrivatePtr priv = vm->privateData; - virDomainCapsCPUModelsPtr models = NULL; + g_autoptr(virDomainCapsCPUModels) models = NULL; int rc; if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) @@ -4355,7 +4329,6 @@ qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, return 0; error: - virObjectUnref(models); return -1; } @@ -4367,7 +4340,7 @@ qemuProcessUpdateCPU(virQEMUDriverPtr driver, { virCPUDataPtr cpu = NULL; virCPUDataPtr disabled = NULL; - virDomainCapsCPUModelsPtr models = NULL; + g_autoptr(virDomainCapsCPUModels) models = NULL; int ret = -1; /* The host CPU model comes from host caps rather than QEMU caps so @@ -4390,7 +4363,6 @@ qemuProcessUpdateCPU(virQEMUDriverPtr driver, cleanup: virCPUDataFree(cpu); virCPUDataFree(disabled); - virObjectUnref(models); return ret; } @@ -4737,9 +4709,9 @@ static int qemuProcessGetNetworkAddress(const char *netname, char **netaddr) { - virConnectPtr conn = NULL; + g_autoptr(virConnect) conn = NULL; int ret = -1; - virNetworkPtr net; + g_autoptr(virNetwork) net = NULL; virNetworkDefPtr netdef = NULL; virNetworkIPDefPtr ipdef; virSocketAddr addr; @@ -4825,8 +4797,6 @@ qemuProcessGetNetworkAddress(const char *netname, ret = 0; cleanup: virNetworkDefFree(netdef); - virObjectUnref(net); - virObjectUnref(conn); return ret; } @@ -4863,7 +4833,7 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, virDomainObjPtr vm) { qemuDomainObjPrivatePtr priv = vm->privateData; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); const char *type = virDomainGraphicsTypeToString(graphics->type); char *listenAddr = NULL; bool useSocket = false; @@ -4937,7 +4907,6 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } @@ -5656,7 +5625,7 @@ qemuProcessNetworkPrepareDevices(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv = vm->privateData; int ret = -1; size_t i; - virConnectPtr conn = NULL; + g_autoptr(virConnect) conn = NULL; for (i = 0; i < def->nnets; i++) { virDomainNetDefPtr net = def->nets[i]; @@ -5709,7 +5678,6 @@ qemuProcessNetworkPrepareDevices(virQEMUDriverPtr driver, } ret = 0; cleanup: - virObjectUnref(conn); return ret; } @@ -6249,7 +6217,7 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver, int ret = -1; size_t i; qemuDomainObjPrivatePtr priv = vm->privateData; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); priv->machineName = qemuDomainGetMachineName(vm); if (!priv->machineName) @@ -6353,7 +6321,6 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } @@ -6512,7 +6479,7 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, int ret = -1; unsigned int hostdev_flags = 0; qemuDomainObjPrivatePtr priv = vm->privateData; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); if (qemuPrepareNVRAM(cfg, vm) < 0) goto cleanup; @@ -6601,7 +6568,6 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } @@ -6712,11 +6678,11 @@ qemuProcessLaunch(virConnectPtr conn, int ret = -1; int rv; int logfile = -1; - qemuDomainLogContextPtr logCtxt = NULL; + g_autoptr(qemuDomainLogContext) logCtxt = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; - virCommandPtr cmd = NULL; + g_autoptr(virCommand) cmd = NULL; struct qemuProcessHookData hookData; - virQEMUDriverConfigPtr cfg; + g_autoptr(virQEMUDriverConfig) cfg = NULL; size_t nnicindexes = 0; g_autofree int *nicindexes = NULL; size_t i; @@ -7022,9 +6988,6 @@ qemuProcessLaunch(virConnectPtr conn, if (ret < 0) qemuExtDevicesStop(driver, vm); qemuDomainSecretDestroy(vm); - virCommandFree(cmd); - virObjectUnref(logCtxt); - virObjectUnref(cfg); return ret; } @@ -7081,8 +7044,8 @@ qemuProcessFinishStartup(virQEMUDriverPtr driver, bool startCPUs, virDomainPausedReason pausedReason) { - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); int ret = -1; + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); if (startCPUs) { VIR_DEBUG("Starting domain CPUs"); @@ -7110,7 +7073,6 @@ qemuProcessFinishStartup(virQEMUDriverPtr driver, ret = 0; cleanup: - virObjectUnref(cfg); return ret; } @@ -7346,8 +7308,8 @@ void qemuProcessStop(virQEMUDriverPtr driver, const virNetDevVPortProfile *vport = NULL; size_t i; g_autofree char *timestamp = NULL; - virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); - virConnectPtr conn = NULL; + g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); + g_autoptr(virConnect) conn = NULL; VIR_DEBUG("Shutting down vm=%p name=%s id=%d pid=%lld, " "reason=%s, asyncJob=%s, flags=0x%x", @@ -7662,8 +7624,6 @@ void qemuProcessStop(virQEMUDriverPtr driver, cleanup: virErrorRestore(&orig_err); - virObjectUnref(conn); - virObjectUnref(cfg); } @@ -7977,7 +7937,7 @@ qemuProcessReconnect(void *opaque) qemuDomainJobObj oldjob; int state; int reason; - virQEMUDriverConfigPtr cfg; + g_autoptr(virQEMUDriverConfig) cfg = NULL; size_t i; unsigned int stopFlags = 0; bool jobStarted = false; @@ -8225,7 +8185,6 @@ qemuProcessReconnect(void *opaque) qemuDomainRemoveInactiveJob(driver, obj); } virDomainObjEndAPI(&obj); - virObjectUnref(cfg); virNWFilterUnlockFilterUpdates(); virIdentitySetCurrent(NULL); return; -- 2.24.1

On 12/20/19 4:16 PM, Daniel Henrique Barboza wrote:
Change all feasible pointers to use g_autoptr().
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- src/qemu/qemu_process.c | 123 ++++++++++++++-------------------------- 1 file changed, 41 insertions(+), 82 deletions(-) @@ -4340,7 +4314,7 @@ qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, virDomainCapsCPUModelsPtr *cpuModels) { qemuDomainObjPrivatePtr priv = vm->privateData; - virDomainCapsCPUModelsPtr models = NULL; + g_autoptr(virDomainCapsCPUModels) models = NULL; int rc;
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) @@ -4355,7 +4329,6 @@ qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, return 0;
error: - virObjectUnref(models); return -1; }
The 'error:' label here tipped me that something might be off. 'models' is only supposed to be freed on error, but this frees it unconditionally. I adapted this function to use g_steal_pointer as well, and pushed this series with that addition Thanks, Cole

The g_auto*() changes made by the previous patches made a lot of 'cleanup' labels obsolete. Let's remove them. Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- src/qemu/qemu_process.c | 182 ++++++++++++++++------------------------ 1 file changed, 70 insertions(+), 112 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index c30084bec3..0243adfb05 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -2070,7 +2070,6 @@ qemuProcessLookupPTYs(virDomainChrDefPtr *devices, virHashTablePtr info) { size_t i; - int ret = -1; for (i = 0; i < count; i++) { g_autofree char *id = NULL; @@ -2088,7 +2087,7 @@ qemuProcessLookupPTYs(virDomainChrDefPtr *devices, */ virReportError(VIR_ERR_INTERNAL_ERROR, _("no assigned pty for device %s"), id); - goto cleanup; + return -1; } else { /* 'info chardev' had no pty path for this chardev, * but the log output had, so we're fine @@ -2102,9 +2101,7 @@ qemuProcessLookupPTYs(virDomainChrDefPtr *devices, } } - ret = 0; - cleanup: - return ret; + return 0; } static int @@ -2703,7 +2700,6 @@ static int qemuProcessResctrlCreate(virQEMUDriverPtr driver, virDomainObjPtr vm) { - int ret = -1; size_t i = 0; g_autoptr(virCaps) caps = NULL; qemuDomainObjPrivatePtr priv = vm->privateData; @@ -2722,7 +2718,7 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver, if (virResctrlAllocCreate(caps->host.resctrl, vm->def->resctrls[i]->alloc, priv->machineName) < 0) - goto cleanup; + return -1; for (j = 0; j < vm->def->resctrls[i]->nmonitors; j++) { virDomainResctrlMonDefPtr mon = NULL; @@ -2730,13 +2726,11 @@ qemuProcessResctrlCreate(virQEMUDriverPtr driver, mon = vm->def->resctrls[i]->monitors[j]; if (virResctrlMonitorCreate(mon->instance, priv->machineName) < 0) - goto cleanup; + return -1; } } - ret = 0; - cleanup: - return ret; + return 0; } @@ -2950,10 +2944,9 @@ qemuProcessInitPasswords(virQEMUDriverPtr driver, } if (ret < 0) - goto cleanup; + return ret; } - cleanup: return ret; } @@ -3181,7 +3174,7 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, /* Bring up netdevs before starting CPUs */ if (qemuInterfaceStartDevices(vm->def) < 0) - goto cleanup; + return -1; VIR_DEBUG("Using lock state '%s'", NULLSTR(priv->lockState)); if (virDomainLockProcessResume(driver->lockManager, cfg->uri, @@ -3190,7 +3183,7 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, * to make sure we have state still present if the user * tries to resume again */ - goto cleanup; + return -1; } VIR_FREE(priv->lockState); @@ -3211,7 +3204,6 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, * lifecycle event. */ - cleanup: return ret; release: @@ -3219,7 +3211,7 @@ qemuProcessStartCPUs(virQEMUDriverPtr driver, virDomainObjPtr vm, if (virDomainLockProcessPause(driver->lockManager, vm, &priv->lockState) < 0) VIR_WARN("Unable to release lease on %s", vm->def->name); VIR_DEBUG("Preserving lock state '%s'", NULLSTR(priv->lockState)); - goto cleanup; + return ret; } @@ -3844,7 +3836,6 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver, size_t i; bool shouldBuildHP = false; bool shouldBuildMB = false; - int ret = -1; if (build) { shouldBuildHP = qemuProcessNeedHugepagesPath(vm->def, mem); @@ -3857,27 +3848,25 @@ qemuProcessBuildDestroyMemoryPaths(virQEMUDriverPtr driver, path = qemuGetDomainHugepagePath(vm->def, &cfg->hugetlbfs[i]); if (!path) - goto cleanup; + return -1; if (qemuProcessBuildDestroyMemoryPathsImpl(driver, vm, path, build) < 0) - goto cleanup; + return -1; } } if (!build || shouldBuildMB) { g_autofree char *path = NULL; if (qemuGetMemoryBackingDomainPath(vm->def, cfg, &path) < 0) - goto cleanup; + return -1; if (qemuProcessBuildDestroyMemoryPathsImpl(driver, vm, path, build) < 0) - goto cleanup; + return -1; } - ret = 0; - cleanup: - return ret; + return 0; } @@ -3888,20 +3877,17 @@ qemuProcessDestroyMemoryBackingPath(virQEMUDriverPtr driver, { g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); g_autofree char *path = NULL; - int ret = -1; if (qemuGetMemoryBackingPath(vm->def, cfg, mem->info.alias, &path) < 0) - goto cleanup; + return -1; if (unlink(path) < 0 && errno != ENOENT) { virReportSystemError(errno, _("Unable to remove %s"), path); - goto cleanup; + return -1; } - ret = 0; - cleanup: - return ret; + return 0; } @@ -3945,7 +3931,6 @@ qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver, unsigned short tlsPort; size_t i; int defaultMode = graphics->data.spice.defaultMode; - int ret = -1; bool needTLSPort = false; bool needPort = false; @@ -3991,13 +3976,12 @@ qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver, if (needTLSPort || graphics->data.spice.tlsPort == -1) graphics->data.spice.tlsPort = 5902; - ret = 0; - goto cleanup; + return 0; } if (needPort || graphics->data.spice.port == -1) { if (virPortAllocatorAcquire(driver->remotePorts, &port) < 0) - goto cleanup; + return -1; graphics->data.spice.port = port; @@ -4010,11 +3994,11 @@ qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver, virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("Auto allocation of spice TLS port requested " "but spice TLS is disabled in qemu.conf")); - goto cleanup; + return -1; } if (virPortAllocatorAcquire(driver->remotePorts, &tlsPort) < 0) - goto cleanup; + return -1; graphics->data.spice.tlsPort = tlsPort; @@ -4022,10 +4006,7 @@ qemuProcessSPICEAllocatePorts(virQEMUDriverPtr driver, graphics->data.spice.tlsPortReserved = true; } - ret = 0; - - cleanup: - return ret; + return 0; } @@ -4318,18 +4299,15 @@ qemuProcessFetchCPUDefinitions(virQEMUDriverPtr driver, int rc; if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) - goto error; + return -1; rc = virQEMUCapsFetchCPUModels(priv->mon, vm->def->os.arch, &models); if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) - goto error; + return -1; *cpuModels = models; return 0; - - error: - return -1; } @@ -4838,7 +4816,6 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, char *listenAddr = NULL; bool useSocket = false; size_t i; - int ret = -1; switch (graphics->type) { case VIR_DOMAIN_GRAPHICS_TYPE_VNC: @@ -4887,7 +4864,7 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, if (qemuProcessGraphicsSetupNetworkAddress(glisten, listenAddr) < 0) - goto cleanup; + return -1; break; case VIR_DOMAIN_GRAPHICS_LISTEN_TYPE_SOCKET: @@ -4904,10 +4881,7 @@ qemuProcessGraphicsSetupListen(virQEMUDriverPtr driver, } } - ret = 0; - - cleanup: - return ret; + return 0; } @@ -5623,7 +5597,6 @@ qemuProcessNetworkPrepareDevices(virQEMUDriverPtr driver, { virDomainDefPtr def = vm->def; qemuDomainObjPrivatePtr priv = vm->privateData; - int ret = -1; size_t i; g_autoptr(virConnect) conn = NULL; @@ -5637,9 +5610,9 @@ qemuProcessNetworkPrepareDevices(virQEMUDriverPtr driver, */ if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) { if (!conn && !(conn = virGetConnectNetwork())) - goto cleanup; + return -1; if (virDomainNetAllocateActualDevice(conn, def, net) < 0) - goto cleanup; + return -1; } actualType = virDomainNetGetActualType(net); @@ -5663,10 +5636,10 @@ qemuProcessNetworkPrepareDevices(virQEMUDriverPtr driver, pcisrc->addr.domain, pcisrc->addr.bus, pcisrc->addr.slot, pcisrc->addr.function, net->data.network.name, def->name); - goto cleanup; + return -1; } if (virDomainHostdevInsert(def, hostdev) < 0) - goto cleanup; + return -1; } else if (actualType == VIR_DOMAIN_NET_TYPE_USER && !priv->disableSlirp && virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_DBUS_VMSTATE)) { @@ -5676,9 +5649,7 @@ qemuProcessNetworkPrepareDevices(virQEMUDriverPtr driver, } } - ret = 0; - cleanup: - return ret; + return 0; } @@ -6214,14 +6185,13 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { - int ret = -1; size_t i; qemuDomainObjPrivatePtr priv = vm->privateData; g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); priv->machineName = qemuDomainGetMachineName(vm); if (!priv->machineName) - goto cleanup; + return -1; if (!(flags & VIR_QEMU_PROCESS_START_PRETEND)) { /* If you are using a SecurityDriver with dynamic labelling, @@ -6229,12 +6199,12 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver, VIR_DEBUG("Generating domain security label (if required)"); if (qemuSecurityGenLabel(driver->securityManager, vm->def) < 0) { virDomainAuditSecurityLabel(vm, false); - goto cleanup; + return -1; } virDomainAuditSecurityLabel(vm, true); if (qemuProcessPrepareDomainNUMAPlacement(driver, vm) < 0) - goto cleanup; + return -1; } /* Whether we should use virtlogd as stdio handler for character @@ -6259,53 +6229,53 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver, VIR_DEBUG("Assigning domain PCI addresses"); if ((qemuDomainAssignAddresses(vm->def, priv->qemuCaps, driver, vm, !!(flags & VIR_QEMU_PROCESS_START_NEW))) < 0) { - goto cleanup; + return -1; } if (qemuAssignDeviceAliases(vm->def, priv->qemuCaps) < 0) - goto cleanup; + return -1; VIR_DEBUG("Setting graphics devices"); if (qemuProcessSetupGraphics(driver, vm, priv->qemuCaps, flags) < 0) - goto cleanup; + return -1; VIR_DEBUG("Create domain masterKey"); if (qemuDomainMasterKeyCreate(vm) < 0) - goto cleanup; + return -1; VIR_DEBUG("Setting up storage"); if (qemuProcessPrepareDomainStorage(driver, vm, priv, cfg, flags) < 0) - goto cleanup; + return -1; VIR_DEBUG("Prepare chardev source backends for TLS"); qemuDomainPrepareChardevSource(vm->def, cfg); VIR_DEBUG("Prepare device secrets"); if (qemuDomainSecretPrepare(driver, vm) < 0) - goto cleanup; + return -1; VIR_DEBUG("Prepare bios/uefi paths"); if (qemuFirmwareFillDomain(driver, vm, flags) < 0) - goto cleanup; + return -1; if (qemuDomainInitializePflashStorageSource(vm) < 0) - goto cleanup; + return -1; VIR_DEBUG("Preparing external devices"); if (qemuExtDevicesPrepareDomain(driver, vm) < 0) - goto cleanup; + return -1; for (i = 0; i < vm->def->nchannels; i++) { if (qemuDomainPrepareChannel(vm->def->channels[i], priv->channelTargetDir) < 0) - goto cleanup; + return -1; } if (!(priv->monConfig = virDomainChrSourceDefNew(driver->xmlopt))) - goto cleanup; + return -1; VIR_DEBUG("Preparing monitor state"); if (qemuProcessPrepareMonitorChr(priv->monConfig, priv->libDir) < 0) - goto cleanup; + return -1; priv->monError = false; priv->monStart = 0; @@ -6314,14 +6284,12 @@ qemuProcessPrepareDomain(virQEMUDriverPtr driver, VIR_DEBUG("Updating guest CPU definition"); if (qemuProcessUpdateGuestCPU(vm->def, priv->qemuCaps, driver->hostarch, flags) < 0) - goto cleanup; + return -1; for (i = 0; i < vm->def->nshmems; i++) qemuDomainPrepareShmemChardev(vm->def->shmems[i]); - ret = 0; - cleanup: - return ret; + return 0; } @@ -6333,7 +6301,6 @@ qemuProcessSEVCreateFile(virDomainObjPtr vm, qemuDomainObjPrivatePtr priv = vm->privateData; virQEMUDriverPtr driver = priv->driver; g_autofree char *configFile = NULL; - int ret = -1; if (!(configFile = virFileBuildPath(priv->libDir, name, ".base64"))) return -1; @@ -6341,15 +6308,13 @@ qemuProcessSEVCreateFile(virDomainObjPtr vm, if (virFileRewriteStr(configFile, S_IRUSR | S_IWUSR, data) < 0) { virReportSystemError(errno, _("failed to write data to config '%s'"), configFile); - goto cleanup; + return -1; } if (qemuSecurityDomainSetPathLabel(driver, vm, configFile, true) < 0) - goto cleanup; + return -1; - ret = 0; - cleanup: - return ret; + return 0; } @@ -6476,17 +6441,16 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, virDomainObjPtr vm, unsigned int flags) { - int ret = -1; unsigned int hostdev_flags = 0; qemuDomainObjPrivatePtr priv = vm->privateData; g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); if (qemuPrepareNVRAM(cfg, vm) < 0) - goto cleanup; + return -1; if (vm->def->vsock) { if (qemuProcessOpenVhostVsock(vm->def->vsock) < 0) - goto cleanup; + return -1; } /* network devices must be "prepared" before hostdevs, because * setting up a network device might create a new hostdev that @@ -6494,7 +6458,7 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, */ VIR_DEBUG("Preparing network devices"); if (qemuProcessNetworkPrepareDevices(driver, vm) < 0) - goto cleanup; + return -1; /* Must be run before security labelling */ VIR_DEBUG("Preparing host devices"); @@ -6504,17 +6468,17 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, hostdev_flags |= VIR_HOSTDEV_COLD_BOOT; if (qemuHostdevPrepareDomainDevices(driver, vm->def, priv->qemuCaps, hostdev_flags) < 0) - goto cleanup; + return -1; VIR_DEBUG("Preparing chr devices"); if (virDomainChrDefForeach(vm->def, true, qemuProcessPrepareChardevDevice, NULL) < 0) - goto cleanup; + return -1; if (qemuProcessBuildDestroyMemoryPaths(driver, vm, NULL, true) < 0) - goto cleanup; + return -1; /* Ensure no historical cgroup for this VM is lying around bogus * settings */ @@ -6525,14 +6489,14 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, virReportSystemError(errno, _("cannot create log directory %s"), cfg->logDir); - goto cleanup; + return -1; } VIR_FREE(priv->pidfile); if (!(priv->pidfile = virPidFileBuildPath(cfg->stateDir, vm->def->name))) { virReportSystemError(errno, "%s", _("Failed to build pidfile path.")); - goto cleanup; + return -1; } if (unlink(priv->pidfile) < 0 && @@ -6540,7 +6504,7 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, virReportSystemError(errno, _("Cannot remove stale PID file %s"), priv->pidfile); - goto cleanup; + return -1; } /* @@ -6549,26 +6513,24 @@ qemuProcessPrepareHost(virQEMUDriverPtr driver, */ if (qemuProcessMakeDir(driver, vm, priv->libDir) < 0 || qemuProcessMakeDir(driver, vm, priv->channelTargetDir) < 0) - goto cleanup; + return -1; VIR_DEBUG("Write domain masterKey"); if (qemuDomainWriteMasterKeyFile(driver, vm) < 0) - goto cleanup; + return -1; VIR_DEBUG("Preparing disks (host)"); if (qemuProcessPrepareHostStorage(driver, vm, flags) < 0) - goto cleanup; + return -1; VIR_DEBUG("Preparing external devices"); if (qemuExtDevicesPrepareHost(driver, vm) < 0) - goto cleanup; + return -1; if (qemuProcessPrepareSEVGuestInput(vm) < 0) - goto cleanup; + return -1; - ret = 0; - cleanup: - return ret; + return 0; } @@ -7044,7 +7006,6 @@ qemuProcessFinishStartup(virQEMUDriverPtr driver, bool startCPUs, virDomainPausedReason pausedReason) { - int ret = -1; g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver); if (startCPUs) { @@ -7055,7 +7016,7 @@ qemuProcessFinishStartup(virQEMUDriverPtr driver, if (virGetLastErrorCode() == VIR_ERR_OK) virReportError(VIR_ERR_OPERATION_FAILED, "%s", _("resume operation failed")); - goto cleanup; + return -1; } } else { virDomainObjSetState(vm, VIR_DOMAIN_PAUSED, pausedReason); @@ -7063,17 +7024,14 @@ qemuProcessFinishStartup(virQEMUDriverPtr driver, VIR_DEBUG("Writing domain status to disk"); if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0) - goto cleanup; + return -1; if (qemuProcessStartHook(driver, vm, VIR_HOOK_QEMU_OP_STARTED, VIR_HOOK_SUBOP_BEGIN) < 0) - goto cleanup; - - ret = 0; + return -1; - cleanup: - return ret; + return 0; } -- 2.24.1

The 'cleanup' flag is doing no cleaup in this function. We can remove it and return NULL on error or qemuBuildCommandLine(). Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com> --- src/qemu/qemu_process.c | 37 ++++++++++++++++--------------------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 0243adfb05..54e13723c1 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7148,11 +7148,9 @@ qemuProcessCreatePretendCmd(virQEMUDriverPtr driver, bool standalone, unsigned int flags) { - virCommandPtr cmd = NULL; - - virCheckFlagsGoto(VIR_QEMU_PROCESS_START_COLD | - VIR_QEMU_PROCESS_START_PAUSED | - VIR_QEMU_PROCESS_START_AUTODESTROY, cleanup); + virCheckFlags(VIR_QEMU_PROCESS_START_COLD | + VIR_QEMU_PROCESS_START_PAUSED | + VIR_QEMU_PROCESS_START_AUTODESTROY, NULL); flags |= VIR_QEMU_PROCESS_START_PRETEND; flags |= VIR_QEMU_PROCESS_START_NEW; @@ -7161,26 +7159,23 @@ qemuProcessCreatePretendCmd(virQEMUDriverPtr driver, if (qemuProcessInit(driver, vm, NULL, QEMU_ASYNC_JOB_NONE, !!migrateURI, flags) < 0) - goto cleanup; + return NULL; if (qemuProcessPrepareDomain(driver, vm, flags) < 0) - goto cleanup; + return NULL; VIR_DEBUG("Building emulator command line"); - cmd = qemuBuildCommandLine(driver, - NULL, - driver->securityManager, - vm, - migrateURI, - NULL, - VIR_NETDEV_VPORT_PROFILE_OP_NO_OP, - standalone, - enableFips, - NULL, - NULL); - - cleanup: - return cmd; + return qemuBuildCommandLine(driver, + NULL, + driver->securityManager, + vm, + migrateURI, + NULL, + VIR_NETDEV_VPORT_PROFILE_OP_NO_OP, + standalone, + enableFips, + NULL, + NULL); } -- 2.24.1
participants (2)
-
Cole Robinson
-
Daniel Henrique Barboza