提交 198c992d 编写于 作者: D Daniel P. Berrange

Speed up fallback to legacy non-QMP probing

Since we daemonized QEMU for capabilities probing there is a long
time if QEMU fails to launch. This is because we're not passing in
any virDomainObjPtr instance and thus the monitor code can not
check to see if the PID is still alive.
Signed-off-by: NDaniel P. Berrange <berrange@redhat.com>
上级 038cffd8
...@@ -2307,6 +2307,8 @@ qemuCapsInitQMP(qemuCapsPtr caps, ...@@ -2307,6 +2307,8 @@ qemuCapsInitQMP(qemuCapsPtr caps,
char *pidfile = NULL; char *pidfile = NULL;
qemuCapsHookData hookData; qemuCapsHookData hookData;
char *archstr; char *archstr;
pid_t pid = 0;
virDomainObj vm;
/* 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
* domain called "capabilities" * domain called "capabilities"
...@@ -2360,7 +2362,16 @@ qemuCapsInitQMP(qemuCapsPtr caps, ...@@ -2360,7 +2362,16 @@ qemuCapsInitQMP(qemuCapsPtr caps,
goto cleanup; goto cleanup;
} }
if (!(mon = qemuMonitorOpen(NULL, &config, true, &callbacks))) { if (virPidFileReadPath(pidfile, &pid) < 0) {
VIR_DEBUG("Failed to read pidfile %s", pidfile);
ret = 0;
goto cleanup;
}
memset(&vm, 0, sizeof(vm));
vm.pid = pid;
if (!(mon = qemuMonitorOpen(&vm, &config, true, &callbacks))) {
ret = 0; ret = 0;
goto cleanup; goto cleanup;
} }
...@@ -2446,21 +2457,16 @@ cleanup: ...@@ -2446,21 +2457,16 @@ cleanup:
VIR_FREE(monpath); VIR_FREE(monpath);
VIR_FREE(package); VIR_FREE(package);
if (pidfile) { if (pid != 0) {
char ebuf[1024]; char ebuf[1024];
pid_t pid;
int rc;
if ((rc = virPidFileReadPath(pidfile, &pid)) < 0) {
VIR_DEBUG("Failed to read pidfile %s: %s",
pidfile, virStrerror(-rc, ebuf, sizeof(ebuf)));
} else {
VIR_DEBUG("Killing QMP caps process %lld", (long long) pid); VIR_DEBUG("Killing QMP caps process %lld", (long long) pid);
if (virProcessKill(pid, SIGKILL) < 0 && errno != ESRCH) if (virProcessKill(pid, SIGKILL) < 0 && errno != ESRCH)
VIR_ERROR(_("Failed to kill process %lld: %s"), VIR_ERROR(_("Failed to kill process %lld: %s"),
(long long) pid, (long long) pid,
virStrerror(errno, ebuf, sizeof(ebuf))); virStrerror(errno, ebuf, sizeof(ebuf)));
} }
if (pidfile) {
unlink(pidfile); unlink(pidfile);
VIR_FREE(pidfile); VIR_FREE(pidfile);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册