11 cgroupfs_find_mountpoint(
char *
buf,
size_t maxlen)
18 fp = fopen(
"/proc/mounts",
"r");
29 mountpoint, type, tokens) == 3) {
31 if (!
strcmp(type,
"cgroup")) {
33 token = strtok_r(tokens,
",", &saved_ptr);
35 while (token !=
NULL) {
36 if (!
strcmp(token,
"perf_event")) {
40 token = strtok_r(
NULL,
",", &saved_ptr);
50 if (
strlen(mountpoint) < maxlen) {
57 static int open_cgroup(
char *
name)
64 if (cgroupfs_find_mountpoint(mnt,
PATH_MAX + 1))
71 fprintf(stderr,
"no access to cgroup %s\n", path);
95 cgrp =
zalloc(
sizeof(*cgrp));
101 cgrp->
fd = open_cgroup(str);
102 if (cgrp->
fd == -1) {
124 counter->
cgrp = cgrp;
134 if (--cgrp->
refcnt == 0) {
142 int unset __maybe_unused)
145 const char *
p, *
e, *eos = str +
strlen(str);
149 if (list_empty(&evlist->
entries)) {
150 fprintf(stderr,
"must define events before cgroups\n");
161 s = strndup(str,
e - str);
164 ret = add_cgroup(evlist, s);