]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cgroup-util: move Set* allocation into cg_kernel_controllers()
authorLennart Poettering <lennart@poettering.net>
Fri, 17 Nov 2017 15:27:13 +0000 (16:27 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 21 Nov 2017 10:54:08 +0000 (11:54 +0100)
Previously, callers had to do this on their own. Let's make the call do
that instead, making the caller code a bit shorter.

src/basic/cgroup-util.c
src/basic/cgroup-util.h
src/core/mount-setup.c
src/nspawn/nspawn-mount.c

index cd32896b26073a2abf4efa6824be1f26b44403f9..7a3a1b2b0ea6ab028a89c3f544d109ed27587d91 100644 (file)
@@ -2369,21 +2369,29 @@ int cg_mask_supported(CGroupMask *ret) {
         return 0;
 }
 
-int cg_kernel_controllers(Set *controllers) {
+int cg_kernel_controllers(Set **ret) {
+        _cleanup_set_free_free_ Set *controllers = NULL;
         _cleanup_fclose_ FILE *f = NULL;
         int r;
 
-        assert(controllers);
+        assert(ret);
 
         /* Determines the full list of kernel-known controllers. Might
          * include controllers we don't actually support, arbitrary
          * named hierarchies and controllers that aren't currently
          * accessible (because not mounted). */
 
+        controllers = set_new(&string_hash_ops);
+        if (!controllers)
+                return -ENOMEM;
+
         f = fopen("/proc/cgroups", "re");
         if (!f) {
-                if (errno == ENOENT)
+                if (errno == ENOENT) {
+                        *ret = NULL;
                         return 0;
+                }
+
                 return -errno;
         }
 
@@ -2421,6 +2429,9 @@ int cg_kernel_controllers(Set *controllers) {
                         return r;
         }
 
+        *ret = controllers;
+        controllers = NULL;
+
         return 0;
 }
 
index df3d01e4eff5c4c442f40631c7e2c3b011d4603e..e286e4e9c21bcc8a7776520c46176125f2d95a91 100644 (file)
@@ -243,7 +243,7 @@ int cg_mask_supported(CGroupMask *ret);
 int cg_mask_from_string(const char *s, CGroupMask *ret);
 int cg_mask_to_string(CGroupMask mask, char **ret);
 
-int cg_kernel_controllers(Set *controllers);
+int cg_kernel_controllers(Set **controllers);
 
 bool cg_ns_supported(void);
 
index 0054cf8ba3a48e1e82f1e9d52cb48423c1394f7e..adf20b68c77b71e2385b69bea159148e8f53ba12 100644 (file)
@@ -237,11 +237,7 @@ int mount_cgroup_controllers(char ***join_controllers) {
 
         /* Mount all available cgroup controllers that are built into the kernel. */
 
-        controllers = set_new(&string_hash_ops);
-        if (!controllers)
-                return log_oom();
-
-        r = cg_kernel_controllers(controllers);
+        r = cg_kernel_controllers(&controllers);
         if (r < 0)
                 return log_error_errno(r, "Failed to enumerate cgroup controllers: %m");
 
index bfff53054c3965846d6510b6ace09cd830a035c3..9e6f573ae3434770bb66bbc25d66ac3205180797 100644 (file)
@@ -1111,11 +1111,7 @@ static int mount_legacy_cgns_unsupported(
         if (r > 0)
                 goto skip_controllers;
 
-        controllers = set_new(&string_hash_ops);
-        if (!controllers)
-                return log_oom();
-
-        r = cg_kernel_controllers(controllers);
+        r = cg_kernel_controllers(&controllers);
         if (r < 0)
                 return log_error_errno(r, "Failed to determine cgroup controllers: %m");