SD_JSON_BUILD_PAIR_CONDITION(use_duration, "duration", SD_JSON_BUILD_UNSIGNED(c->moom_mem_pressure_duration_usec)));
}
-static int build_managed_oom_cgroups_json(Manager *m, sd_json_variant **ret) {
- _cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL, *arr = NULL;
+static int build_managed_oom_cgroups_json(Manager *m, bool allow_empty, sd_json_variant **ret) {
+ _cleanup_(sd_json_variant_unrefp) sd_json_variant *arr = NULL;
int r;
assert(m);
assert(ret);
- r = sd_json_build(&arr, SD_JSON_BUILD_EMPTY_ARRAY);
- if (r < 0)
- return r;
+ if (allow_empty) {
+ r = sd_json_build(&arr, SD_JSON_BUILD_EMPTY_ARRAY);
+ if (r < 0)
+ return r;
+ }
for (UnitType t = 0; t < _UNIT_TYPE_MAX; t++) {
}
}
- r = sd_json_buildo(&v, SD_JSON_BUILD_PAIR("cgroups", SD_JSON_BUILD_VARIANT(arr)));
+ if (!arr) {
+ assert(!allow_empty);
+ *ret = NULL;
+ return 0;
+ }
+
+ r = sd_json_buildo(ret, SD_JSON_BUILD_PAIR("cgroups", SD_JSON_BUILD_VARIANT(arr)));
if (r < 0)
return r;
- *ret = TAKE_PTR(v);
- return 0;
+ return 1;
}
static int manager_varlink_send_managed_oom_initial(Manager *m) {
assert(m->managed_oom_varlink);
- r = build_managed_oom_cgroups_json(m, &v);
- if (r < 0)
+ r = build_managed_oom_cgroups_json(m, /* allow_empty = */ false, &v);
+ if (r <= 0)
return r;
return sd_varlink_send(m->managed_oom_varlink, "io.systemd.oom.ReportManagedOOMCGroups", v);
if (!c)
return 0;
- r = sd_json_build(&arr, SD_JSON_BUILD_EMPTY_ARRAY);
- if (r < 0)
- return r;
+ if (MANAGER_IS_SYSTEM(u->manager)) {
+ r = sd_json_build(&arr, SD_JSON_BUILD_EMPTY_ARRAY);
+ if (r < 0)
+ return r;
+ }
FOREACH_ELEMENT(i, managed_oom_mode_properties) {
_cleanup_(sd_json_variant_unrefp) sd_json_variant *e = NULL;
return r;
}
+ if (!arr) {
+ /* There is nothing updated. Skip calling method. */
+ assert(!MANAGER_IS_SYSTEM(u->manager));
+ return 0;
+ }
+
r = sd_json_buildo(&v, SD_JSON_BUILD_PAIR("cgroups", SD_JSON_BUILD_VARIANT(arr)));
if (r < 0)
return r;
_cleanup_(sd_json_variant_unrefp) sd_json_variant *v = NULL;
- r = build_managed_oom_cgroups_json(m, &v);
+ r = build_managed_oom_cgroups_json(m, /* allow_empty = */ true, &v);
if (r < 0)
return r;