chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
unit: save description/slice of transient units to /run
[elogind.git]
/
src
/
core
/
manager.c
diff --git
a/src/core/manager.c
b/src/core/manager.c
index 080561b5d108a1729687c004fae4780daaaa01b8..2e98181b37d3e6ee057bd75066c7ea49591726f6 100644
(file)
--- a/
src/core/manager.c
+++ b/
src/core/manager.c
@@
-72,9
+72,6
@@
#include "efivars.h"
#include "env-util.h"
#include "efivars.h"
#include "env-util.h"
-/* As soon as 16 units are in our GC queue, make sure to run a gc sweep */
-#define GC_QUEUE_ENTRIES_MAX 16
-
/* As soon as 5s passed since a unit was added to our GC queue, make sure to run a gc sweep */
#define GC_QUEUE_USEC_MAX (10*USEC_PER_SEC)
/* As soon as 5s passed since a unit was added to our GC queue, make sure to run a gc sweep */
#define GC_QUEUE_USEC_MAX (10*USEC_PER_SEC)
@@
-427,7
+424,7
@@
static void manager_strip_environment(Manager *m) {
strv_env_clean(m->environment);
}
strv_env_clean(m->environment);
}
-int manager_new(SystemdRunningAs running_as, Manager **_m) {
+int manager_new(SystemdRunningAs running_as,
bool reexecuting,
Manager **_m) {
Manager *m;
int r = -ENOMEM;
Manager *m;
int r = -ENOMEM;
@@
-479,7
+476,8
@@
int manager_new(SystemdRunningAs running_as, Manager **_m) {
if (!m->cgroup_unit)
goto fail;
if (!m->cgroup_unit)
goto fail;
- if (!(m->watch_bus = hashmap_new(string_hash_func, string_compare_func)))
+ m->watch_bus = hashmap_new(string_hash_func, string_compare_func);
+ if (!m->watch_bus)
goto fail;
m->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
goto fail;
m->epoll_fd = epoll_create1(EPOLL_CLOEXEC);
@@
-505,7
+503,7
@@
int manager_new(SystemdRunningAs running_as, Manager **_m) {
/* Try to connect to the busses, if possible. */
if ((running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) ||
running_as == SYSTEMD_SYSTEM) {
/* Try to connect to the busses, if possible. */
if ((running_as == SYSTEMD_USER && getenv("DBUS_SESSION_BUS_ADDRESS")) ||
running_as == SYSTEMD_SYSTEM) {
- r = bus_init(m, running_as != SYSTEMD_SYSTEM);
+ r = bus_init(m, r
eexecuting || r
unning_as != SYSTEMD_SYSTEM);
if (r < 0)
goto fail;
} else
if (r < 0)
goto fail;
} else
@@
-604,12
+602,7
@@
static unsigned manager_dispatch_gc_queue(Manager *m) {
assert(m);
assert(m);
- if ((m->n_in_gc_queue < GC_QUEUE_ENTRIES_MAX) &&
- (m->gc_queue_timestamp <= 0 ||
- (m->gc_queue_timestamp + GC_QUEUE_USEC_MAX) > now(CLOCK_MONOTONIC)))
- return 0;
-
- log_debug("Running GC...");
+ /* log_debug("Running GC..."); */
m->gc_marker += _GC_OFFSET_MAX;
if (m->gc_marker + _GC_OFFSET_MAX <= _GC_OFFSET_MAX)
m->gc_marker += _GC_OFFSET_MAX;
if (m->gc_marker + _GC_OFFSET_MAX <= _GC_OFFSET_MAX)
@@
-636,7
+629,6
@@
static unsigned manager_dispatch_gc_queue(Manager *m) {
}
m->n_in_gc_queue = 0;
}
m->n_in_gc_queue = 0;
- m->gc_queue_timestamp = 0;
return n;
}
return n;
}
@@
-872,6
+864,11
@@
int manager_startup(Manager *m, FILE *serialization, FDSet *fds) {
if (serialization) {
assert(m->n_reloading > 0);
m->n_reloading --;
if (serialization) {
assert(m->n_reloading > 0);
m->n_reloading --;
+
+ /* Let's wait for the UnitNew/JobNew messages being
+ * sent, before we notify that the reload is
+ * finished */
+ m->send_reloading_done = true;
}
return r;
}
return r;
@@
-1171,6
+1168,13
@@
unsigned manager_dispatch_dbus_queue(Manager *m) {
}
m->dispatching_dbus_queue = false;
}
m->dispatching_dbus_queue = false;
+
+ if (m->send_reloading_done) {
+ m->send_reloading_done = false;
+
+ bus_broadcast_reloading(m, false);
+ }
+
return n;
}
return n;
}
@@
-1733,19
+1737,19
@@
int manager_loop(Manager *m) {
if (manager_dispatch_load_queue(m) > 0)
continue;
if (manager_dispatch_load_queue(m) > 0)
continue;
- if (manager_dispatch_
run
_queue(m) > 0)
+ if (manager_dispatch_
gc
_queue(m) > 0)
continue;
continue;
- if (
bus_dispatch
(m) > 0)
+ if (
manager_dispatch_cleanup_queue
(m) > 0)
continue;
continue;
- if (manager_dispatch_c
lean
up_queue(m) > 0)
+ if (manager_dispatch_c
gro
up_queue(m) > 0)
continue;
continue;
- if (manager_dispatch_
gc
_queue(m) > 0)
+ if (manager_dispatch_
run
_queue(m) > 0)
continue;
continue;
- if (
manager_dispatch_cgroup_queue
(m) > 0)
+ if (
bus_dispatch
(m) > 0)
continue;
if (manager_dispatch_dbus_queue(m) > 0)
continue;
if (manager_dispatch_dbus_queue(m) > 0)
@@
-2050,6
+2054,8
@@
int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) {
}
}
}
}
+ bus_serialize(m, f);
+
fputc('\n', f);
HASHMAP_FOREACH_KEY(u, t, m->units, i) {
fputc('\n', f);
HASHMAP_FOREACH_KEY(u, t, m->units, i) {
@@
-2063,7
+2069,8
@@
int manager_serialize(Manager *m, FILE *f, FDSet *fds, bool switching_root) {
fputs(u->id, f);
fputc('\n', f);
fputs(u->id, f);
fputc('\n', f);
- if ((r = unit_serialize(u, f, fds, !switching_root)) < 0) {
+ r = unit_serialize(u, f, fds, !switching_root);
+ if (r < 0) {
m->n_reloading --;
return r;
}
m->n_reloading --;
return r;
}
@@
-2168,7
+2175,7
@@
int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
strv_free(m->environment);
m->environment = e;
strv_free(m->environment);
m->environment = e;
- } else
+ } else
if (bus_deserialize_item(m, l) == 0)
log_debug("Unknown serialization item '%s'", l);
}
log_debug("Unknown serialization item '%s'", l);
}
@@
-2243,6
+2250,7
@@
int manager_reload(Manager *m) {
return r;
m->n_reloading ++;
return r;
m->n_reloading ++;
+ bus_broadcast_reloading(m, true);
fds = fdset_new();
if (!fds) {
fds = fdset_new();
if (!fds) {
@@
-2302,6
+2310,8
@@
int manager_reload(Manager *m) {
assert(m->n_reloading > 0);
m->n_reloading--;
assert(m->n_reloading > 0);
m->n_reloading--;
+ m->send_reloading_done = true;
+
finish:
if (f)
fclose(f);
finish:
if (f)
fclose(f);