#include "strv.h"
#include "conf-parser.h"
#include "mkdir.h"
-#include "cgroup-util.h"
Manager *manager_new(void) {
Manager *m;
free(m);
}
-int manager_add_machine(Manager *m, const char *name, Machine **_machine) {
- Machine *machine;
-
- assert(m);
- assert(name);
-
- machine = hashmap_get(m->machines, name);
- if (machine) {
- if (_machine)
- *_machine = machine;
-
- return 0;
- }
-
- machine = machine_new(m, name);
- if (!m)
- return -ENOMEM;
-
- if (_machine)
- *_machine = machine;
-
- return 0;
-}
-
int manager_enumerate_machines(Manager *m) {
_cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
return r;
}
-int manager_get_machine_by_pid(Manager *m, pid_t pid, Machine **machine) {
- _cleanup_free_ char *unit = NULL;
- Machine *mm;
- int r;
-
- assert(m);
- assert(pid >= 1);
- assert(machine);
-
- r = cg_pid_get_unit(pid, &unit);
- if (r < 0)
- return r;
-
- mm = hashmap_get(m->machine_units, unit);
- if (!mm)
- return 0;
-
- *machine = mm;
- return 1;
-}
-
static int manager_connect_bus(Manager *m) {
DBusError error;
int r;
dbus_error_free(&error);
}
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='UnitRemoved',"
+ "path='/org/freedesktop/systemd1'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for UnitRemoved: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
dbus_bus_add_match(m->bus,
"type='signal',"
"sender='org.freedesktop.systemd1',"
dbus_error_free(&error);
}
+ dbus_bus_add_match(m->bus,
+ "type='signal',"
+ "sender='org.freedesktop.systemd1',"
+ "interface='org.freedesktop.systemd1.Manager',"
+ "member='Reloading',"
+ "path='/org/freedesktop/systemd1'",
+ &error);
+ if (dbus_error_is_set(&error)) {
+ log_error("Failed to add match for Reloading: %s", bus_error_message(&error));
+ dbus_error_free(&error);
+ }
+
r = bus_method_call_with_reply(
m->bus,
"org.freedesktop.systemd1",
assert(m);
while ((machine = m->machine_gc_queue)) {
- LIST_REMOVE(Machine, gc_queue, m->machine_gc_queue, machine);
+ LIST_REMOVE(gc_queue, m->machine_gc_queue, machine);
machine->in_gc_queue = false;
if (machine_check_gc(machine, drop_not_started) == 0) {
/* And start everything */
HASHMAP_FOREACH(machine, m->machines, i)
- machine_start(machine);
+ machine_start(machine, NULL);
return 0;
}