summaryrefslogtreecommitdiffstats
path: root/src/cgtop
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2018-11-25 15:54:19 +0100
committerYu Watanabe <watanabe.yu+github@gmail.com>2018-12-02 12:06:02 +0100
commitfb8d181e5918f3d2dc38cb9d6f64aac9ce2e6367 (patch)
treeb593185ba83190c2bab3e7e28e302bfaf365c279 /src/cgtop
parenttest: add tests for destructors of hashmap or set (diff)
downloadsystemd-fb8d181e5918f3d2dc38cb9d6f64aac9ce2e6367.tar.xz
systemd-fb8d181e5918f3d2dc38cb9d6f64aac9ce2e6367.zip
cgtop: introduce group_hash_ops and use it
Diffstat (limited to 'src/cgtop')
-rw-r--r--src/cgtop/cgtop.c28
1 files changed, 10 insertions, 18 deletions
diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c
index 5f6e778a38..6a821ff38e 100644
--- a/src/cgtop/cgtop.c
+++ b/src/cgtop/cgtop.c
@@ -84,24 +84,14 @@ static enum {
CPU_TIME,
} arg_cpu_type = CPU_PERCENT;
-static void group_free(Group *g) {
- assert(g);
+static Group *group_free(Group *g) {
+ if (!g)
+ return NULL;
free(g->path);
- free(g);
+ return mfree(g);
}
-static void group_hashmap_clear(Hashmap *h) {
- hashmap_clear_with_destructor(h, group_free);
-}
-
-static void group_hashmap_free(Hashmap *h) {
- group_hashmap_clear(h);
- hashmap_free(h);
-}
-
-DEFINE_TRIVIAL_CLEANUP_FUNC(Hashmap*, group_hashmap_free);
-
static const char *maybe_format_bytes(char *buf, size_t l, bool is_valid, uint64_t t) {
if (!is_valid)
return "-";
@@ -908,8 +898,10 @@ static const char* counting_what(void) {
return "userspace processes (excl. kernel)";
}
+DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(group_hash_ops, char, path_hash_func, path_compare_func, Group, group_free);
+
static int run(int argc, char *argv[]) {
- _cleanup_(group_hashmap_freep) Hashmap *a = NULL, *b = NULL;
+ _cleanup_hashmap_free_ Hashmap *a = NULL, *b = NULL;
unsigned iteration = 0;
usec_t last_refresh = 0;
bool quit = false, immediate_refresh = false;
@@ -940,8 +932,8 @@ static int run(int argc, char *argv[]) {
return log_error_errno(r, "Failed to get root control group path: %m");
log_debug("Cgroup path: %s", root);
- a = hashmap_new(&path_hash_ops);
- b = hashmap_new(&path_hash_ops);
+ a = hashmap_new(&group_hash_ops);
+ b = hashmap_new(&group_hash_ops);
if (!a || !b)
return log_oom();
@@ -964,7 +956,7 @@ static int run(int argc, char *argv[]) {
if (r < 0)
return log_error_errno(r, "Failed to refresh: %m");
- group_hashmap_clear(b);
+ hashmap_clear(b);
c = a;
a = b;