summaryrefslogtreecommitdiff
path: root/usr/src/cmd/svc/startd/transition.c
diff options
context:
space:
mode:
authorAndrew Stormont <astormont@racktopsystems.com>2016-09-08 13:02:43 +0100
committerDan McDonald <danmcd@omniti.com>2016-09-09 11:39:41 -0400
commit2633ea2405fe9036261e499e3d436091642da653 (patch)
tree00d8b66e72097e02286d7f64970ff33562f3722c /usr/src/cmd/svc/startd/transition.c
parentf2d34afa1058d195513e7ab9a6c1f0ce38b4d05b (diff)
downloadillumos-joyent-2633ea2405fe9036261e499e3d436091642da653.tar.gz
7267 SMF is fast and loose with optional dependencies
Reviewed by: Dan McDonald <danmcd@omniti.com> Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com> Reviewed by: Albert Lee <trisk@omniti.com> Approved by: Dan McDonald <danmcd@omniti.com>
Diffstat (limited to 'usr/src/cmd/svc/startd/transition.c')
-rw-r--r--usr/src/cmd/svc/startd/transition.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/usr/src/cmd/svc/startd/transition.c b/usr/src/cmd/svc/startd/transition.c
index 4e7a884719..a62d40088c 100644
--- a/usr/src/cmd/svc/startd/transition.c
+++ b/usr/src/cmd/svc/startd/transition.c
@@ -21,6 +21,8 @@
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2016 RackTop Systems.
*/
@@ -137,6 +139,13 @@ gt_enter_maint(scf_handle_t *h, graph_vertex_t *v,
"%s.\n", v->gv_name);
graph_transition_propagate(v, PROPAGATE_STOP, rerr);
+
+ /*
+ * The maintenance transition may satisfy optional_all/restart
+ * dependencies and should be propagated to determine
+ * whether new dependents are satisfiable.
+ */
+ graph_transition_propagate(v, PROPAGATE_SAT, rerr);
} else {
log_framework(LOG_DEBUG, "Propagating maintenance of %s.\n",
v->gv_name);
@@ -267,6 +276,12 @@ gt_enter_disabled(scf_handle_t *h, graph_vertex_t *v,
graph_transition_propagate(v, PROPAGATE_STOP, rerr);
+ /*
+ * The disable transition may satisfy optional_all/restart
+ * dependencies and should be propagated to determine
+ * whether new dependents are satisfiable.
+ */
+ graph_transition_propagate(v, PROPAGATE_SAT, rerr);
} else {
log_framework(LOG_DEBUG, "Propagating disable of %s.\n",
v->gv_name);