summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Wilcox <Sean.Wilcox@Sun.COM>2010-02-04 08:53:43 -0800
committerSean Wilcox <Sean.Wilcox@Sun.COM>2010-02-04 08:53:43 -0800
commitc238c833c812c2845a9e35d4599c8d2a85f73ba9 (patch)
tree25847c8eff6d3c142efedc27d6250fe5d3cddcb2
parentd07682fa9b3911bfddbc33f2cc66bf64acbb27ae (diff)
downloadillumos-gate-c238c833c812c2845a9e35d4599c8d2a85f73ba9.tar.gz
6919271 wait services are not getting timers reset on a clean exit
6920199 bind dependent services are remaining offline when bind is re-enabled
-rw-r--r--usr/src/cmd/cmd-inet/usr.lib/inetd/inetd.c1
-rw-r--r--usr/src/cmd/svc/startd/graph.c4
-rw-r--r--usr/src/cmd/svc/startd/restarter.c6
3 files changed, 5 insertions, 6 deletions
diff --git a/usr/src/cmd/cmd-inet/usr.lib/inetd/inetd.c b/usr/src/cmd/cmd-inet/usr.lib/inetd/inetd.c
index 67327b5f5b..8ef243f9ed 100644
--- a/usr/src/cmd/cmd-inet/usr.lib/inetd/inetd.c
+++ b/usr/src/cmd/cmd-inet/usr.lib/inetd/inetd.c
@@ -1855,6 +1855,7 @@ handle_restarter_event(instance_t *instance, restarter_event_type_t event,
*/
instance->maintenance_req = B_TRUE;
/* FALLTHROUGH */
+ case RESTARTER_EVENT_TYPE_STOP_RESET:
case RESTARTER_EVENT_TYPE_STOP:
/*
* Dependencies have become unmet. Close and
diff --git a/usr/src/cmd/svc/startd/graph.c b/usr/src/cmd/svc/startd/graph.c
index c3c66bb2a1..12131ffd20 100644
--- a/usr/src/cmd/svc/startd/graph.c
+++ b/usr/src/cmd/svc/startd/graph.c
@@ -1732,7 +1732,7 @@ propagate_stop(graph_vertex_t *v, void *arg)
case GVT_INST:
/* Restarter */
if (err > RERR_NONE && inst_running(v)) {
- if (err == RERR_RESTART) {
+ if (err == RERR_RESTART || err == RERR_REFRESH) {
vertex_send_event(v,
RESTARTER_EVENT_TYPE_STOP_RESET);
} else {
@@ -1767,7 +1767,7 @@ propagate_stop(graph_vertex_t *v, void *arg)
svc = e->ge_vertex;
if (inst_running(svc)) {
- if (err == RERR_RESTART) {
+ if (err == RERR_RESTART || err == RERR_REFRESH) {
vertex_send_event(svc,
RESTARTER_EVENT_TYPE_STOP_RESET);
} else {
diff --git a/usr/src/cmd/svc/startd/restarter.c b/usr/src/cmd/svc/startd/restarter.c
index 0d795604b4..d7b1c1482c 100644
--- a/usr/src/cmd/svc/startd/restarter.c
+++ b/usr/src/cmd/svc/startd/restarter.c
@@ -1087,6 +1087,7 @@ stop_instance(scf_handle_t *local_handle, restarter_inst_t *inst,
}
(void) update_fault_count(inst, FAULT_COUNT_RESET);
+ reset_start_times(inst);
if (inst->ri_i.i_primary_ctid != 0) {
inst->ri_m_inst =
@@ -1602,7 +1603,7 @@ const char *event_names[] = { "INVALID", "ADD_INSTANCE", "REMOVE_INSTANCE",
"ENABLE", "DISABLE", "ADMIN_DEGRADED", "ADMIN_REFRESH",
"ADMIN_RESTART", "ADMIN_MAINT_OFF", "ADMIN_MAINT_ON",
"ADMIN_MAINT_ON_IMMEDIATE", "STOP", "START", "DEPENDENCY_CYCLE",
- "INVALID_DEPENDENCY", "ADMIN_DISABLE"
+ "INVALID_DEPENDENCY", "ADMIN_DISABLE", "STOP_RESET"
};
/*
@@ -2000,9 +2001,6 @@ contract_action(scf_handle_t *h, restarter_inst_t *inst, ctid_t id,
* process we're monitoring, then the
* wait_thread will stop the instance.
*/
- if (type == CT_PR_EV_EMPTY)
- reset_start_times(inst);
-
log_framework(LOG_DEBUG,
"%s: ignoring contract event on wait-style service\n",
fmri);