diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-04-24 15:27:19 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-04-24 15:51:10 +0200 |
commit | be847e82cf95bf8eb589778df2aa2b3d1d7ae99e (patch) | |
tree | 91c85462c6741f4426ecb2334755994be81fd4c1 /src/core/manager.c | |
parent | 9211e875148588ca96988bb781a27b96ac33adfa (diff) |
Revert "core: do not spawn jobs or touch other units during coldplugging"
This reverts commit 6e392c9c45643d106673c6643ac8bf4e65da13c1.
We really shouldn't invent external state keeping hashmaps, if we can
keep this state in the units themselves.
Diffstat (limited to 'src/core/manager.c')
-rw-r--r-- | src/core/manager.c | 35 |
1 files changed, 2 insertions, 33 deletions
diff --git a/src/core/manager.c b/src/core/manager.c index 2b04644dc1..39a868fed6 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -981,28 +981,7 @@ static int manager_coldplug(Manager *m) { Unit *u; char *k; - /* - * Some unit types tend to spawn jobs or check other units' state - * during coldplug. This is wrong because it is undefined whether the - * units in question have been already coldplugged (i. e. their state - * restored). This way, we can easily re-start an already started unit - * or otherwise make a wrong decision based on the unit's state. - * - * Solve this by providing a way for coldplug functions to defer - * such actions until after all units have been coldplugged. - * - * We store Unit* -> int(*)(Unit*). - * - * https://bugs.freedesktop.org/show_bug.cgi?id=88401 - */ - _cleanup_hashmap_free_ Hashmap *deferred_work = NULL; - int(*proc)(Unit*); - - assert(m); - - deferred_work = hashmap_new(&trivial_hash_ops); - if (!deferred_work) - return -ENOMEM; + assert(m); /* Then, let's set up their initial state. */ HASHMAP_FOREACH_KEY(u, k, m->units, i) { @@ -1012,17 +991,7 @@ static int manager_coldplug(Manager *m) { if (u->id != k) continue; - q = unit_coldplug(u, deferred_work); - if (q < 0) - r = q; - } - - /* After coldplugging and setting up initial state of the units, - * let's perform operations which spawn jobs or query units' state. */ - HASHMAP_FOREACH_KEY(proc, u, deferred_work, i) { - int q; - - q = proc(u); + q = unit_coldplug(u); if (q < 0) r = q; } |