提交 f1b17525 编写于 作者: M Michael Chapman 提交者: Michal Privoznik

virtlockd: use common exit path when out-of-memory

Also use a distinct, valid exit status for daemon re-execution failure.
Signed-off-by: NMichael Chapman <mike@very.puzzling.org>
上级 8355d42d
...@@ -77,6 +77,7 @@ enum { ...@@ -77,6 +77,7 @@ enum {
VIR_LOCK_DAEMON_ERR_NETWORK, VIR_LOCK_DAEMON_ERR_NETWORK,
VIR_LOCK_DAEMON_ERR_CONFIG, VIR_LOCK_DAEMON_ERR_CONFIG,
VIR_LOCK_DAEMON_ERR_HOOKS, VIR_LOCK_DAEMON_ERR_HOOKS,
VIR_LOCK_DAEMON_ERR_REEXEC,
VIR_LOCK_DAEMON_ERR_LAST VIR_LOCK_DAEMON_ERR_LAST
}; };
...@@ -91,7 +92,8 @@ VIR_ENUM_IMPL(virDaemonErr, VIR_LOCK_DAEMON_ERR_LAST, ...@@ -91,7 +92,8 @@ VIR_ENUM_IMPL(virDaemonErr, VIR_LOCK_DAEMON_ERR_LAST,
"Unable to drop privileges", "Unable to drop privileges",
"Unable to initialize network sockets", "Unable to initialize network sockets",
"Unable to load configuration file", "Unable to load configuration file",
"Unable to look for hook scripts"); "Unable to look for hook scripts",
"Unable to re-execute daemon");
static void * static void *
virLockDaemonClientNew(virNetServerClientPtr client, virLockDaemonClientNew(virNetServerClientPtr client,
...@@ -1203,18 +1205,14 @@ int main(int argc, char **argv) { ...@@ -1203,18 +1205,14 @@ int main(int argc, char **argv) {
case 'p': case 'p':
VIR_FREE(pid_file); VIR_FREE(pid_file);
if (VIR_STRDUP_QUIET(pid_file, optarg) < 0) { if (VIR_STRDUP_QUIET(pid_file, optarg) < 0)
VIR_ERROR(_("Can't allocate memory")); goto no_memory;
exit(EXIT_FAILURE);
}
break; break;
case 'f': case 'f':
VIR_FREE(remote_config_file); VIR_FREE(remote_config_file);
if (VIR_STRDUP_QUIET(remote_config_file, optarg) < 0) { if (VIR_STRDUP_QUIET(remote_config_file, optarg) < 0)
VIR_ERROR(_("Can't allocate memory")); goto no_memory;
exit(EXIT_FAILURE);
}
break; break;
case 'V': case 'V':
...@@ -1298,10 +1296,8 @@ int main(int argc, char **argv) { ...@@ -1298,10 +1296,8 @@ int main(int argc, char **argv) {
/* Ensure the rundir exists (on tmpfs on some systems) */ /* Ensure the rundir exists (on tmpfs on some systems) */
if (privileged) { if (privileged) {
if (VIR_STRDUP_QUIET(run_dir, LOCALSTATEDIR "/run/libvirt") < 0) { if (VIR_STRDUP_QUIET(run_dir, LOCALSTATEDIR "/run/libvirt") < 0)
VIR_ERROR(_("Can't allocate memory")); goto no_memory;
goto cleanup;
}
} else { } else {
if (!(run_dir = virGetUserRuntimeDirectory())) { if (!(run_dir = virGetUserRuntimeDirectory())) {
VIR_ERROR(_("Can't determine user directory")); VIR_ERROR(_("Can't determine user directory"));
...@@ -1395,7 +1391,7 @@ int main(int argc, char **argv) { ...@@ -1395,7 +1391,7 @@ int main(int argc, char **argv) {
if (execRestart && if (execRestart &&
virLockDaemonPreExecRestart(lockDaemon->srv, argv) < 0) virLockDaemonPreExecRestart(lockDaemon->srv, argv) < 0)
ret = -1; ret = VIR_LOCK_DAEMON_ERR_REEXEC;
else else
ret = 0; ret = 0;
...@@ -1418,4 +1414,8 @@ cleanup: ...@@ -1418,4 +1414,8 @@ cleanup:
VIR_FREE(sock_file); VIR_FREE(sock_file);
VIR_FREE(run_dir); VIR_FREE(run_dir);
return ret; return ret;
no_memory:
VIR_ERROR(_("Can't allocate memory"));
exit(EXIT_FAILURE);
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册