From: Michael Tremer Date: Mon, 8 Aug 2022 15:23:50 +0000 (+0000) Subject: builds: Create a new cgroup X-Git-Tag: 0.9.28~580 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f877fdfab56dbc58c6b9b304cae21a890e8f5057;p=pakfire.git builds: Create a new cgroup Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/build.c b/src/libpakfire/build.c index 6cd0edde9..5041f4aca 100644 --- a/src/libpakfire/build.c +++ b/src/libpakfire/build.c @@ -26,6 +26,7 @@ #include #include +#include #include #include #include @@ -49,6 +50,10 @@ struct pakfire_build { // Build ID uuid_t id; + char _id[UUID_STR_LEN]; + + // cgroup + struct pakfire_cgroup* cgroup; }; static const char* stages[] = { @@ -776,6 +781,9 @@ ERROR: } static void pakfire_build_free(struct pakfire_build* build) { + if (build->cgroup) + pakfire_cgroup_unref(build->cgroup); + pakfire_unref(build->pakfire); free(build); } @@ -796,6 +804,35 @@ static int pakfire_build_parse_id(struct pakfire_build* build, const char* id) { uuid_generate_random(build->id); } + // Store the ID as string, too + uuid_unparse_lower(build->id, build->_id); + + return 0; +} + +/* + Sets up a new cgroup for this build +*/ +static int pakfire_build_setup_cgroup(struct pakfire_build* build) { + char path[PATH_MAX]; + int r; + + // Compose path + r = pakfire_string_format(path, "pakfire/build-%s", build->_id); + if (r < 0) { + ERROR(build->pakfire, "Could not compose path for cgroup: %m\n"); + return 1; + } + + // Create a new cgroup + r = pakfire_cgroup_open(&build->cgroup, build->pakfire, path, + PAKFIRE_CGROUP_ENABLE_ACCOUNTING); + if (r) { + ERROR(build->pakfire, "Could not create cgroup for build %s: %m\n", build->_id); + return r; + } + + // Done return 0; } @@ -822,6 +859,11 @@ PAKFIRE_EXPORT int pakfire_build_create(struct pakfire_build** build, if (r) goto ERROR; + // Create cgroup + r = pakfire_build_setup_cgroup(b); + if (r) + goto ERROR; + *build = b; return 0;