mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 03:12:22 +00:00
virLockDaemonPreExecRestart: Refactor memory cleanup
Switch to using the 'g_auto*' helpers. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
013e7564ff
commit
bf666cac6b
@ -697,87 +697,76 @@ virLockDaemonPreExecRestart(const char *state_file,
|
||||
virNetDaemonPtr dmn,
|
||||
char **argv)
|
||||
{
|
||||
virJSONValuePtr child;
|
||||
char *state = NULL;
|
||||
virJSONValuePtr object = virJSONValueNewObject();
|
||||
char *magic = NULL;
|
||||
virHashKeyValuePairPtr pairs = NULL, tmp;
|
||||
virJSONValuePtr lockspaces;
|
||||
g_autoptr(virJSONValue) object = virJSONValueNewObject();
|
||||
g_autoptr(virJSONValue) lockspaces = virJSONValueNewArray();
|
||||
g_autoptr(virJSONValue) defaultLockspace = NULL;
|
||||
g_autoptr(virJSONValue) daemon = NULL;
|
||||
g_autofree char *state = NULL;
|
||||
g_autofree char *magic = NULL;
|
||||
g_autofree virHashKeyValuePairPtr pairs = NULL;
|
||||
virHashKeyValuePairPtr tmp;
|
||||
|
||||
VIR_DEBUG("Running pre-restart exec");
|
||||
|
||||
if (!(child = virNetDaemonPreExecRestart(dmn)))
|
||||
goto cleanup;
|
||||
if (!(daemon = virNetDaemonPreExecRestart(dmn)))
|
||||
return -1;
|
||||
|
||||
if (virJSONValueObjectAppend(object, "daemon", child) < 0) {
|
||||
virJSONValueFree(child);
|
||||
goto cleanup;
|
||||
}
|
||||
if (virJSONValueObjectAppend(object, "daemon", daemon) < 0)
|
||||
return -1;
|
||||
daemon = NULL;
|
||||
|
||||
if (!(child = virLockSpacePreExecRestart(lockDaemon->defaultLockspace)))
|
||||
goto cleanup;
|
||||
|
||||
if (virJSONValueObjectAppend(object, "defaultLockspace", child) < 0) {
|
||||
virJSONValueFree(child);
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
lockspaces = virJSONValueNewArray();
|
||||
|
||||
if (virJSONValueObjectAppend(object, "lockspaces", lockspaces) < 0) {
|
||||
virJSONValueFree(lockspaces);
|
||||
goto cleanup;
|
||||
}
|
||||
if (!(defaultLockspace = virLockSpacePreExecRestart(lockDaemon->defaultLockspace)))
|
||||
return -1;
|
||||
|
||||
if (virJSONValueObjectAppend(object, "defaultLockspace", defaultLockspace) < 0)
|
||||
return -1;
|
||||
defaultLockspace = NULL;
|
||||
|
||||
tmp = pairs = virHashGetItems(lockDaemon->lockspaces, NULL, false);
|
||||
while (tmp && tmp->key) {
|
||||
virLockSpacePtr lockspace = (virLockSpacePtr)tmp->value;
|
||||
g_autoptr(virJSONValue) child = NULL;
|
||||
|
||||
if (!(child = virLockSpacePreExecRestart(lockspace)))
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
if (virJSONValueArrayAppend(lockspaces, child) < 0) {
|
||||
virJSONValueFree(child);
|
||||
goto cleanup;
|
||||
}
|
||||
if (virJSONValueArrayAppend(lockspaces, child) < 0)
|
||||
return -1;
|
||||
child = NULL;
|
||||
|
||||
tmp++;
|
||||
}
|
||||
|
||||
if (virJSONValueObjectAppend(object, "lockspaces", lockspaces) < 0)
|
||||
return -1;
|
||||
lockspaces = NULL;
|
||||
|
||||
if (!(magic = virLockDaemonGetExecRestartMagic()))
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
if (virJSONValueObjectAppendString(object, "magic", magic) < 0)
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
if (!(state = virJSONValueToString(object, true)))
|
||||
goto cleanup;
|
||||
return -1;
|
||||
|
||||
VIR_DEBUG("Saving state %s", state);
|
||||
|
||||
if (virFileWriteStr(state_file,
|
||||
state, 0700) < 0) {
|
||||
if (virFileWriteStr(state_file, state, 0700) < 0) {
|
||||
virReportSystemError(errno,
|
||||
_("Unable to save state file %s"),
|
||||
state_file);
|
||||
goto cleanup;
|
||||
_("Unable to save state file %s"), state_file);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (execvp(argv[0], argv) < 0) {
|
||||
virReportSystemError(errno, "%s",
|
||||
_("Unable to restart self"));
|
||||
goto cleanup;
|
||||
return -1;
|
||||
}
|
||||
|
||||
abort(); /* This should be impossible to reach */
|
||||
|
||||
cleanup:
|
||||
VIR_FREE(magic);
|
||||
VIR_FREE(pairs);
|
||||
VIR_FREE(state);
|
||||
virJSONValueFree(object);
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user