summaryrefslogtreecommitdiff
path: root/src/device.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2010-11-14 23:47:53 +0100
committerLennart Poettering <lennart@poettering.net>2010-11-14 23:48:21 +0100
commit6210e7fc31e14159627144f7409eadd3ce0d72b9 (patch)
treeb4510ab2477bdb0fa1df3dbefa91f1b01846c451 /src/device.c
parent9381a72403f622f66294ab10315240a4c4fd71cd (diff)
manager: always pull 'following' units into transaction
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/device.c b/src/device.c
index 7b7311012..7cb4ff699 100644
--- a/src/device.c
+++ b/src/device.c
@@ -401,6 +401,39 @@ static Unit *device_following(Unit *u) {
return UNIT(first);
}
+static int device_following_set(Unit *u, Set **_s) {
+ Device *d = DEVICE(u);
+ Device *other;
+ Set *s;
+ int r;
+
+ assert(d);
+ assert(_s);
+
+ if (!d->same_sysfs_prev && !d->same_sysfs_next) {
+ *_s = NULL;
+ return 0;
+ }
+
+ if (!(s = set_new(NULL, NULL)))
+ return -ENOMEM;
+
+ for (other = d->same_sysfs_next; other; other = other->same_sysfs_next)
+ if ((r = set_put(s, other)) < 0)
+ goto fail;
+
+ for (other = d->same_sysfs_prev; other; other = other->same_sysfs_prev)
+ if ((r = set_put(s, other)) < 0)
+ goto fail;
+
+ *_s = s;
+ return 1;
+
+fail:
+ set_free(s);
+ return r;
+}
+
static void device_shutdown(Manager *m) {
assert(m);
@@ -550,6 +583,7 @@ const UnitVTable device_vtable = {
.bus_invalidating_properties = bus_device_invalidating_properties,
.following = device_following,
+ .following_set = device_following_set,
.enumerate = device_enumerate,
.shutdown = device_shutdown