Commit 6a1d6d2b authored by Poul-Henning Kamp's avatar Poul-Henning Kamp

Only use the kill(pid,0) test to detect dead process if it has

indicated the process was present at one point.
parent 74efa168
......@@ -120,6 +120,8 @@ struct vsm {
int attached;
double patience;
int couldkill;
};
/*--------------------------------------------------------------------*/
......@@ -347,9 +349,11 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
closefd(&vs->fd);
}
if (vs->fd >= 0)
return (retval|VSM_MGT_RUNNING);
if (vs->fd >= 0) {
if (!vd->couldkill || !kill(vs->id1, 0))
retval |= VSM_MGT_RUNNING;
return (retval);
}
retval |= VSM_MGT_CHANGED;
vs->fd = openat(vs->dfd, "_.index", O_RDONLY);
......@@ -377,7 +381,13 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
* XXX: be kill(pid,0)'ed for more rapid abandonment detection.
*/
i = sscanf(VSB_data(vsb), "# %ju %ju\n%n", &id1, &id2, &ac);
if (i != 2 || (kill(id1, 0) && errno == ESRCH)) {
if (i != 2) {
retval |= VSM_MGT_RESTARTED | VSM_MGT_CHANGED;
return (retval);
}
if (!kill(id1, 0)) {
vd->couldkill = 1;
} else if (vd->couldkill && errno == ESRCH) {
retval |= VSM_MGT_RESTARTED | VSM_MGT_CHANGED;
return (retval);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment