m->machines = hashmap_new(string_hash_func, string_compare_func);
m->machine_units = hashmap_new(string_hash_func, string_compare_func);
+ m->machine_leaders = hashmap_new(trivial_hash_func, trivial_compare_func);
- r = sd_event_new(&m->event);
- if (r < 0) {
+ if (!m->machines || !m->machine_units || !m->machine_leaders) {
manager_free(m);
return NULL;
}
- if (!m->machines || !m->machine_units) {
+ r = sd_event_default(&m->event);
+ if (r < 0) {
manager_free(m);
return NULL;
}
hashmap_free(m->machines);
hashmap_free(m->machine_units);
+ hashmap_free(m->machine_leaders);
sd_bus_unref(m->bus);
sd_event_unref(m->event);
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) {
- machine = machine_new(m, name);
- if (!machine)
- return -ENOMEM;
- }
-
- if (_machine)
- *_machine = machine;
-
- return 0;
-}
-
-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;
-}
-
int manager_enumerate_machines(Manager *m) {
_cleanup_closedir_ DIR *d = NULL;
struct dirent *de;
assert(m);
assert(!m->bus);
- r = sd_bus_open_system(&m->bus);
+ r = sd_bus_default_system(&m->bus);
if (r < 0) {
log_error("Failed to connect to system bus: %s", strerror(-r));
return r;
LIST_REMOVE(gc_queue, m->machine_gc_queue, machine);
machine->in_gc_queue = false;
- if (machine_check_gc(machine, drop_not_started) == 0) {
+ if (!machine_check_gc(machine, drop_not_started)) {
machine_stop(machine);
machine_free(machine);
}