X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=blobdiff_plain;f=src%2Fcgroup-util.c;h=090573bd31ee7d0167e47f7ef3603ee0c6082623;hp=bbadc789a1651a30a2d995c85f807c704dc41b84;hb=0ac10822732008aa2c0af7a0499c838446ac0a82;hpb=8f7a3c1402a8de36b2c63935358a53510d2fe7c1 diff --git a/src/cgroup-util.c b/src/cgroup-util.c index bbadc789a..090573bd3 100644 --- a/src/cgroup-util.c +++ b/src/cgroup-util.c @@ -484,6 +484,7 @@ int cg_get_path(const char *controller, const char *path, const char *suffix, ch const char *p; char *mp; int r; + static __thread bool good = false; assert(controller); assert(fs); @@ -504,9 +505,14 @@ int cg_get_path(const char *controller, const char *path, const char *suffix, ch if (asprintf(&mp, "/sys/fs/cgroup/%s", p) < 0) return -ENOMEM; - if ((r = path_is_mount_point(mp)) <= 0) { - free(mp); - return r < 0 ? r : -ENOENT; + if (!good) { + if ((r = path_is_mount_point(mp)) <= 0) { + free(mp); + return r < 0 ? r : -ENOENT; + } + + /* Cache this to save a few stat()s */ + good = true; } if (path && suffix)