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 { ...@@ -120,6 +120,8 @@ struct vsm {
int attached; int attached;
double patience; double patience;
int couldkill;
}; };
/*--------------------------------------------------------------------*/ /*--------------------------------------------------------------------*/
...@@ -347,9 +349,11 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb) ...@@ -347,9 +349,11 @@ vsm_refresh_set2(struct vsm *vd, struct vsm_set *vs, struct vsb *vsb)
closefd(&vs->fd); closefd(&vs->fd);
} }
if (vs->fd >= 0) {
if (vs->fd >= 0) if (!vd->couldkill || !kill(vs->id1, 0))
return (retval|VSM_MGT_RUNNING); retval |= VSM_MGT_RUNNING;
return (retval);
}
retval |= VSM_MGT_CHANGED; retval |= VSM_MGT_CHANGED;
vs->fd = openat(vs->dfd, "_.index", O_RDONLY); 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) ...@@ -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. * XXX: be kill(pid,0)'ed for more rapid abandonment detection.
*/ */
i = sscanf(VSB_data(vsb), "# %ju %ju\n%n", &id1, &id2, &ac); 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; retval |= VSM_MGT_RESTARTED | VSM_MGT_CHANGED;
return (retval); 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