}
static int
-qemuMonitorOpenUnix(const char *monitor)
+qemuMonitorOpenUnix(const char *monitor, pid_t cpid)
{
struct sockaddr_un addr;
int monfd;
if (ret == 0)
break;
- if (errno == ENOENT || errno == ECONNREFUSED) {
+ if ((errno == ENOENT || errno == ECONNREFUSED) &&
+ virKillProcess(cpid, 0) == 0) {
/* ENOENT : Socket may not have shown up yet
* ECONNREFUSED : Leftover socket hasn't been removed yet */
continue;
switch (config->type) {
case VIR_DOMAIN_CHR_TYPE_UNIX:
mon->hasSendFD = 1;
- mon->fd = qemuMonitorOpenUnix(config->data.nix.path);
+ mon->fd = qemuMonitorOpenUnix(config->data.nix.path, vm->pid);
break;
case VIR_DOMAIN_CHR_TYPE_PTY:
* TerminateProcess is more or less equiv to SIG_KILL, in that
* a process can't trap / block it
*/
- if (!TerminateProcess(proc, sig)) {
+ if (sig != 0 && !TerminateProcess(proc, sig)) {
errno = ESRCH;
return -1;
}