diff options
author | Lennart Poettering <lennart@poettering.net> | 2015-09-11 17:25:35 +0200 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2015-09-11 18:31:49 +0200 |
commit | 5269eb6b32f662d21638e54bb13171a5b97fe58f (patch) | |
tree | f9dfe224ed1c863bbbb22840cf1a40ce6d89906b /src/core/manager.c | |
parent | aa36007ca18ece54495d108332ed21b4bf918f3b (diff) |
core: allocate sets of startup and failed units on-demand
There's a good chance we never needs these sets, hence allocate them
only when needed.
Diffstat (limited to 'src/core/manager.c')
-rw-r--r-- | src/core/manager.c | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/src/core/manager.c b/src/core/manager.c index d918007bb8..8fa2e5079e 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -602,14 +602,6 @@ int manager_new(ManagerRunningAs running_as, bool test_run, Manager **_m) { if (r < 0) goto fail; - r = set_ensure_allocated(&m->startup_units, NULL); - if (r < 0) - goto fail; - - r = set_ensure_allocated(&m->failed_units, NULL); - if (r < 0) - goto fail; - r = sd_event_default(&m->event); if (r < 0) goto fail; @@ -3069,8 +3061,9 @@ const char *manager_get_runtime_prefix(Manager *m) { getenv("XDG_RUNTIME_DIR"); } -void manager_update_failed_units(Manager *m, Unit *u, bool failed) { +int manager_update_failed_units(Manager *m, Unit *u, bool failed) { unsigned size; + int r; assert(m); assert(u->manager == m); @@ -3078,13 +3071,19 @@ void manager_update_failed_units(Manager *m, Unit *u, bool failed) { size = set_size(m->failed_units); if (failed) { + r = set_ensure_allocated(&m->failed_units, NULL); + if (r < 0) + return log_oom(); + if (set_put(m->failed_units, u) < 0) - log_oom(); + return log_oom(); } else - set_remove(m->failed_units, u); + (void) set_remove(m->failed_units, u); if (set_size(m->failed_units) != size) bus_manager_send_change_signal(m); + + return 0; } ManagerState manager_state(Manager *m) { |