]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
core: Move user units into app.slice by default
authorBenjamin Berg <bberg@redhat.com>
Tue, 28 Jul 2020 17:12:56 +0000 (19:12 +0200)
committerBenjamin Berg <bberg@redhat.com>
Fri, 23 Oct 2020 07:58:41 +0000 (09:58 +0200)
This changes the default from putting all units into the root slice to
placing them into the app slice in the user manager. The advantage is
that we get the right behaviour in most cases, and we'll need special
case handling in all other cases anyway.

Note that we have currently defined that applications *should* start
their unit names with app-, so we could also move only these by creating
a drop-in for app-.scope and app-.service.
However, that would not answer the question on how we should manage
session.slice. And we would end up placing anything that does not fit
the system (e.g. anything started by dbus-broker currently) into the
root slice.

src/core/unit.c

index 680f4c569bd93f718446b36ebdadee4399a91af7..40578cb3fa52f90768db73785db6773f1e47ac65 100644 (file)
@@ -3345,12 +3345,16 @@ int unit_set_default_slice(Unit *u) {
                 if (MANAGER_IS_SYSTEM(u->manager))
                         slice_name = strjoina("system-", escaped, ".slice");
                 else
-                        slice_name = strjoina(escaped, ".slice");
-        } else
-                slice_name =
-                        MANAGER_IS_SYSTEM(u->manager) && !unit_has_name(u, SPECIAL_INIT_SCOPE)
-                        ? SPECIAL_SYSTEM_SLICE
-                        : SPECIAL_ROOT_SLICE;
+                        slice_name = strjoina("app-", escaped, ".slice");
+        } else {
+                if (MANAGER_IS_SYSTEM(u->manager))
+                        slice_name =
+                                unit_has_name(u, SPECIAL_INIT_SCOPE)
+                                ? SPECIAL_ROOT_SLICE
+                                : SPECIAL_SYSTEM_SLICE;
+                else
+                        slice_name = SPECIAL_APP_SLICE;
+        }
 
         r = manager_load_unit(u->manager, slice_name, NULL, NULL, &slice);
         if (r < 0)