#include "log.h"
#include "unit-name.h"
#include "specifier.h"
+#include "dbus-unit.h"
const UnitVTable * const unit_vtable[_UNIT_TYPE_MAX] = {
[UNIT_SERVICE] = &service_vtable,
assert(u);
assert(pid >= 1);
+ /* Watch a specific PID. We only support one unit watching
+ * each PID for now. */
+
return hashmap_put(u->meta.manager->watch_pids, UINT32_TO_PTR(pid), u);
}
assert(u);
assert(pid >= 1);
- hashmap_remove(u->meta.manager->watch_pids, UINT32_TO_PTR(pid));
+ hashmap_remove_value(u->meta.manager->watch_pids, UINT32_TO_PTR(pid), u);
}
int unit_watch_timer(Unit *u, usec_t delay, Watch *w) {
static char *default_cgroup_path(Unit *u) {
char *p;
+ int r;
assert(u);
- if (asprintf(&p, "%s/%s", u->meta.manager->cgroup_hierarchy, u->meta.id) < 0)
- return NULL;
+ if (u->meta.instance) {
+ char *t;
- return p;
+ if (!(t = unit_name_template(u->meta.id)))
+ return NULL;
+
+ r = asprintf(&p, "%s/%s/%s", u->meta.manager->cgroup_hierarchy, t, u->meta.instance);
+ free(t);
+ } else
+ r = asprintf(&p, "%s/%s", u->meta.manager->cgroup_hierarchy, u->meta.id);
+
+ return r < 0 ? NULL : p;
}
int unit_add_cgroup_from_text(Unit *u, const char *name) {
return NULL;
}
+int unit_watch_bus_name(Unit *u, const char *name) {
+ assert(u);
+ assert(name);
+
+ /* Watch a specific name on the bus. We only support one unit
+ * watching each name for now. */
+
+ return hashmap_put(u->meta.manager->watch_bus, name, u);
+}
+
+void unit_unwatch_bus_name(Unit *u, const char *name) {
+ assert(u);
+ assert(name);
+
+ hashmap_remove_value(u->meta.manager->watch_bus, name, u);
+}
+
static const char* const unit_type_table[_UNIT_TYPE_MAX] = {
[UNIT_SERVICE] = "service",
[UNIT_TIMER] = "timer",