static int pakfire_cgroup_fprintf(Pakfire pakfire,
const char* group, const char* file, const char* format, ...) {
char buffer[64];
- size_t length;
+ ssize_t length;
int r;
va_list args;
// if the operation was successful.
r = write(fileno(f), buffer, length);
+ // Return zero if everything was written correctly
+ if (r == length)
+ r = 0;
+
fclose(f);
return r;
return 0;
}
+
+int pakfire_cgroup_set_nice(Pakfire pakfire, const char* group, int level) {
+ DEBUG(pakfire, "Setting nice level of cgroup %s to %d\n", group, level);
+
+ int r = pakfire_cgroup_fprintf(pakfire, group, "cpu.weight.nice", "%d", level);
+ if (r) {
+ ERROR(pakfire, "Could not change nice level of cgroup %s: %s\n",
+ group, strerror(errno));
+ return r;
+ }
+
+ return 0;
+}
int pakfire_cgroup_cpustat(Pakfire pakfire, const char* group,
struct pakfire_cgroup_cpustat* st);
+int pakfire_cgroup_set_nice(Pakfire pakfire, const char* group, int level);
+
#endif
#endif /* PAKFIRE_CGROUP_H */
);
}
+static int test_nice(const struct test* t) {
+ ASSERT_SUCCESS(
+ pakfire_cgroup_create(t->pakfire, "pakfire/test")
+ );
+
+ // Set nice level
+ ASSERT_SUCCESS(
+ pakfire_cgroup_set_nice(t->pakfire, "pakfire/test", 5)
+ );
+
+ ASSERT_SUCCESS(
+ pakfire_cgroup_destroy(t->pakfire, "pakfire/test")
+ );
+
+ return EXIT_SUCCESS;
+}
+
static int test_random_name(const struct test* t) {
char name1[] = "pakfire/execute-XXXXXX";
char name2[] = "pakfire/execute-XXXXXX";
testsuite_add_test(test_killall);
testsuite_add_test(test_cpustat);
testsuite_add_test(test_random_name);
+ testsuite_add_test(test_nice);
return testsuite_run();
}