Merge pull request #1698 from poettering/pid-is-unwaited-fix
fixup for previous pr
This commit is contained in:
commit
dc1e811ebd
|
@ -364,10 +364,9 @@ static int busname_coldplug(Unit *u) {
|
|||
if (n->deserialized_state == n->state)
|
||||
return 0;
|
||||
|
||||
if (IN_SET(n->deserialized_state, BUSNAME_MAKING, BUSNAME_SIGTERM, BUSNAME_SIGKILL)) {
|
||||
|
||||
if (n->control_pid <= 0)
|
||||
return -EBADMSG;
|
||||
if (n->control_pid > 0 &&
|
||||
pid_is_unwaited(n->control_pid) &&
|
||||
IN_SET(n->deserialized_state, BUSNAME_MAKING, BUSNAME_SIGTERM, BUSNAME_SIGKILL)) {
|
||||
|
||||
r = unit_watch_pid(UNIT(n), n->control_pid);
|
||||
if (r < 0)
|
||||
|
|
|
@ -632,19 +632,19 @@ static int mount_coldplug(Unit *u) {
|
|||
if (new_state == m->state)
|
||||
return 0;
|
||||
|
||||
if (new_state == MOUNT_MOUNTING ||
|
||||
new_state == MOUNT_MOUNTING_DONE ||
|
||||
new_state == MOUNT_REMOUNTING ||
|
||||
new_state == MOUNT_UNMOUNTING ||
|
||||
new_state == MOUNT_MOUNTING_SIGTERM ||
|
||||
new_state == MOUNT_MOUNTING_SIGKILL ||
|
||||
new_state == MOUNT_UNMOUNTING_SIGTERM ||
|
||||
new_state == MOUNT_UNMOUNTING_SIGKILL ||
|
||||
new_state == MOUNT_REMOUNTING_SIGTERM ||
|
||||
new_state == MOUNT_REMOUNTING_SIGKILL) {
|
||||
|
||||
if (m->control_pid <= 0)
|
||||
return -EBADMSG;
|
||||
if (m->control_pid > 0 &&
|
||||
pid_is_unwaited(m->control_pid) &&
|
||||
IN_SET(new_state,
|
||||
MOUNT_MOUNTING,
|
||||
MOUNT_MOUNTING_DONE,
|
||||
MOUNT_REMOUNTING,
|
||||
MOUNT_UNMOUNTING,
|
||||
MOUNT_MOUNTING_SIGTERM,
|
||||
MOUNT_MOUNTING_SIGKILL,
|
||||
MOUNT_UNMOUNTING_SIGTERM,
|
||||
MOUNT_UNMOUNTING_SIGKILL,
|
||||
MOUNT_REMOUNTING_SIGTERM,
|
||||
MOUNT_REMOUNTING_SIGKILL)) {
|
||||
|
||||
r = unit_watch_pid(UNIT(m), m->control_pid);
|
||||
if (r < 0)
|
||||
|
|
|
@ -912,66 +912,67 @@ static int service_coldplug(Unit *u) {
|
|||
assert(s);
|
||||
assert(s->state == SERVICE_DEAD);
|
||||
|
||||
if (s->deserialized_state != s->state) {
|
||||
if (s->deserialized_state == s->state)
|
||||
return 0;
|
||||
|
||||
if (IN_SET(s->deserialized_state,
|
||||
SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
|
||||
SERVICE_RELOAD,
|
||||
SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
|
||||
SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
|
||||
if (IN_SET(s->deserialized_state,
|
||||
SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
|
||||
SERVICE_RELOAD,
|
||||
SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
|
||||
SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
|
||||
|
||||
usec_t k;
|
||||
usec_t k;
|
||||
|
||||
k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
|
||||
k = IN_SET(s->deserialized_state, SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST, SERVICE_RELOAD) ? s->timeout_start_usec : s->timeout_stop_usec;
|
||||
|
||||
/* For the start/stop timeouts 0 means off */
|
||||
if (k > 0) {
|
||||
r = service_arm_timer(s, k);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
}
|
||||
|
||||
if (s->deserialized_state == SERVICE_AUTO_RESTART) {
|
||||
|
||||
/* The restart timeouts 0 means immediately */
|
||||
r = service_arm_timer(s, s->restart_usec);
|
||||
/* For the start/stop timeouts 0 means off */
|
||||
if (k > 0) {
|
||||
r = service_arm_timer(s, k);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (pid_is_unwaited(s->main_pid) &&
|
||||
((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
|
||||
IN_SET(s->deserialized_state,
|
||||
SERVICE_START, SERVICE_START_POST,
|
||||
SERVICE_RUNNING, SERVICE_RELOAD,
|
||||
SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
|
||||
SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
|
||||
r = unit_watch_pid(UNIT(s), s->main_pid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (pid_is_unwaited(s->control_pid) &&
|
||||
IN_SET(s->deserialized_state,
|
||||
SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
|
||||
SERVICE_RELOAD,
|
||||
SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
|
||||
SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
|
||||
r = unit_watch_pid(UNIT(s), s->control_pid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
|
||||
unit_watch_all_pids(UNIT(s));
|
||||
|
||||
if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
|
||||
service_start_watchdog(s);
|
||||
|
||||
service_set_state(s, s->deserialized_state);
|
||||
}
|
||||
|
||||
if (s->deserialized_state == SERVICE_AUTO_RESTART) {
|
||||
|
||||
/* The restart timeouts 0 means immediately */
|
||||
r = service_arm_timer(s, s->restart_usec);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (s->main_pid > 0 &&
|
||||
pid_is_unwaited(s->main_pid) &&
|
||||
((s->deserialized_state == SERVICE_START && IN_SET(s->type, SERVICE_FORKING, SERVICE_DBUS, SERVICE_ONESHOT, SERVICE_NOTIFY)) ||
|
||||
IN_SET(s->deserialized_state,
|
||||
SERVICE_START, SERVICE_START_POST,
|
||||
SERVICE_RUNNING, SERVICE_RELOAD,
|
||||
SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
|
||||
SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL))) {
|
||||
r = unit_watch_pid(UNIT(s), s->main_pid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (s->control_pid > 0 &&
|
||||
pid_is_unwaited(s->control_pid) &&
|
||||
IN_SET(s->deserialized_state,
|
||||
SERVICE_START_PRE, SERVICE_START, SERVICE_START_POST,
|
||||
SERVICE_RELOAD,
|
||||
SERVICE_STOP, SERVICE_STOP_SIGABRT, SERVICE_STOP_SIGTERM, SERVICE_STOP_SIGKILL, SERVICE_STOP_POST,
|
||||
SERVICE_FINAL_SIGTERM, SERVICE_FINAL_SIGKILL)) {
|
||||
r = unit_watch_pid(UNIT(s), s->control_pid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
}
|
||||
|
||||
if (!IN_SET(s->deserialized_state, SERVICE_DEAD, SERVICE_FAILED, SERVICE_AUTO_RESTART))
|
||||
unit_watch_all_pids(UNIT(s));
|
||||
|
||||
if (IN_SET(s->deserialized_state, SERVICE_START_POST, SERVICE_RUNNING, SERVICE_RELOAD))
|
||||
service_start_watchdog(s);
|
||||
|
||||
service_set_state(s, s->deserialized_state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -1455,7 +1455,9 @@ static int socket_coldplug(Unit *u) {
|
|||
if (s->deserialized_state == s->state)
|
||||
return 0;
|
||||
|
||||
if (IN_SET(s->deserialized_state,
|
||||
if (s->control_pid > 0 &&
|
||||
pid_is_unwaited(s->control_pid) &&
|
||||
IN_SET(s->deserialized_state,
|
||||
SOCKET_START_PRE,
|
||||
SOCKET_START_CHOWN,
|
||||
SOCKET_START_POST,
|
||||
|
@ -1466,9 +1468,6 @@ static int socket_coldplug(Unit *u) {
|
|||
SOCKET_FINAL_SIGTERM,
|
||||
SOCKET_FINAL_SIGKILL)) {
|
||||
|
||||
if (s->control_pid <= 0)
|
||||
return -EBADMSG;
|
||||
|
||||
r = unit_watch_pid(UNIT(s), s->control_pid);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
|
|
@ -528,16 +528,16 @@ static int swap_coldplug(Unit *u) {
|
|||
if (new_state == s->state)
|
||||
return 0;
|
||||
|
||||
if (new_state == SWAP_ACTIVATING ||
|
||||
new_state == SWAP_ACTIVATING_SIGTERM ||
|
||||
new_state == SWAP_ACTIVATING_SIGKILL ||
|
||||
new_state == SWAP_ACTIVATING_DONE ||
|
||||
new_state == SWAP_DEACTIVATING ||
|
||||
new_state == SWAP_DEACTIVATING_SIGTERM ||
|
||||
new_state == SWAP_DEACTIVATING_SIGKILL) {
|
||||
|
||||
if (s->control_pid <= 0)
|
||||
return -EBADMSG;
|
||||
if (s->control_pid > 0 &&
|
||||
pid_is_unwaited(s->control_pid) &&
|
||||
IN_SET(new_state,
|
||||
SWAP_ACTIVATING,
|
||||
SWAP_ACTIVATING_SIGTERM,
|
||||
SWAP_ACTIVATING_SIGKILL,
|
||||
SWAP_ACTIVATING_DONE,
|
||||
SWAP_DEACTIVATING,
|
||||
SWAP_DEACTIVATING_SIGTERM,
|
||||
SWAP_DEACTIVATING_SIGKILL)) {
|
||||
|
||||
r = unit_watch_pid(UNIT(s), s->control_pid);
|
||||
if (r < 0)
|
||||
|
|
Loading…
Reference in a new issue