diff options
author | Daan De Meyer <daan.j.demeyer@gmail.com> | 2021-09-02 14:32:31 +0200 |
---|---|---|
committer | Daan De Meyer <daan.j.demeyer@gmail.com> | 2021-09-16 12:26:29 +0100 |
commit | f2ed82d5107cfe557470958a7c0857202952aac3 (patch) | |
tree | 083bd37720e2d652157d718b11d92d9b94414fe2 /src/core/core-varlink.c | |
parent | 71feeae4bf480523d64b580117a05c61774717f1 (diff) | |
download | systemd-f2ed82d5107cfe557470958a7c0857202952aac3.tar.gz |
core: Introduce build_managed_oom_cgroups_json()
Will be reused to build the varlink message contents sent by user
instances of systemd to systemd-oomd's varlink server in a future
commit.
Diffstat (limited to 'src/core/core-varlink.c')
-rw-r--r-- | src/core/core-varlink.c | 46 |
1 files changed, 31 insertions, 15 deletions
diff --git a/src/core/core-varlink.c b/src/core/core-varlink.c index b7afb87d50..29bc3367ea 100644 --- a/src/core/core-varlink.c +++ b/src/core/core-varlink.c @@ -123,26 +123,13 @@ int manager_varlink_send_managed_oom_update(Unit *u) { return varlink_notify(u->manager->managed_oom_varlink_request, v); } -static int vl_method_subscribe_managed_oom_cgroups( - Varlink *link, - JsonVariant *parameters, - VarlinkMethodFlags flags, - void *userdata) { +static int build_managed_oom_cgroups_json(Manager *m, JsonVariant **ret) { static const UnitType supported_unit_types[] = { UNIT_SLICE, UNIT_SERVICE, UNIT_SCOPE }; _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *arr = NULL; - Manager *m = userdata; int r; - assert(link); assert(m); - - if (json_variant_elements(parameters) > 0) - return varlink_error_invalid_parameter(link, parameters); - - /* We only take one subscriber for this method so return an error if there's already an existing one. - * This shouldn't happen since systemd-oomd is the only client of this method. */ - if (FLAGS_SET(flags, VARLINK_METHOD_MORE) && m->managed_oom_varlink_request) - return varlink_error(link, VARLINK_ERROR_SUBSCRIPTION_TAKEN, NULL); + assert(ret); r = json_build(&arr, JSON_BUILD_EMPTY_ARRAY); if (r < 0) @@ -185,6 +172,35 @@ static int vl_method_subscribe_managed_oom_cgroups( if (r < 0) return r; + *ret = TAKE_PTR(v); + return 0; +} + +static int vl_method_subscribe_managed_oom_cgroups( + Varlink *link, + JsonVariant *parameters, + VarlinkMethodFlags flags, + void *userdata) { + + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; + Manager *m = userdata; + int r; + + assert(link); + assert(m); + + if (json_variant_elements(parameters) > 0) + return varlink_error_invalid_parameter(link, parameters); + + /* We only take one subscriber for this method so return an error if there's already an existing one. + * This shouldn't happen since systemd-oomd is the only client of this method. */ + if (FLAGS_SET(flags, VARLINK_METHOD_MORE) && m->managed_oom_varlink_request) + return varlink_error(link, VARLINK_ERROR_SUBSCRIPTION_TAKEN, NULL); + + r = build_managed_oom_cgroups_json(m, &v); + if (r < 0) + return r; + if (!FLAGS_SET(flags, VARLINK_METHOD_MORE)) return varlink_reply(link, v); |