When stopping dependents, also release waits_for/soft dependencies.
authorDavin McCall <davmac@davmac.org>
Mon, 19 Mar 2018 19:01:56 +0000 (19:01 +0000)
committerDavin McCall <davmac@davmac.org>
Mon, 19 Mar 2018 19:01:56 +0000 (19:01 +0000)
waits for / soft dependencies should treat a start failure or other
dependency stop as a prompt to check for start conditions having been
met, after the dependency link is unchained.

src/service.cc

index 5195c56599c8248d0db07f695a36cc839c54a2af..bfa59245ab5eccda255417061824ce3866995702 100644 (file)
@@ -536,6 +536,17 @@ bool service_record::stop_dependents() noexcept
             dept->get_from()->prop_stop = true;
             services->add_prop_queue(dept->get_from());
         }
+        else {
+            // waits-for or soft dependency:
+            if (dept->waiting_on) {
+                dept->waiting_on = false;
+                dept->get_from()->dependency_started();
+            }
+            if (dept->holding_acq) {
+                dept->holding_acq = false;
+                release();
+            }
+        }
     }
 
     return all_deps_stopped;