From c20a2227be7e27ec83ba1fea807dc53521a90183 Mon Sep 17 00:00:00 2001 From: Hyotaek Shim Date: Fri, 5 Mar 2021 11:50:05 +0900 Subject: Apply libsyscommon gdbus api improvement on error handling Change-Id: Ic707f600baf31b77c70fea15c52b63602febad14 Signed-off-by: Hyotaek Shim --- src/core/service.c | 22 +++++++++++++--------- src/decision_makers/unit_control_dm.c | 10 ++++++---- src/util/systemd_dbus.c | 7 ++++++- 3 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/core/service.c b/src/core/service.c index 574c6e1..ded5440 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -51,16 +51,18 @@ int systemd_service_init_by_pid(pid_t pid, struct systemd_service *s) static int get_service_name(const char *dbus_path, char **service_name) { - GVariant *reply = dbus_handle_method_sync_with_reply_var("org.freedesktop.systemd1", + int ret; + GVariant *reply = NULL; + ret = dbus_handle_method_sync_with_reply_var("org.freedesktop.systemd1", dbus_path, "org.freedesktop.DBus.Properties", "Get", - g_variant_new("ss", "org.freedesktop.systemd1.Unit", "Id")); - + g_variant_new("ss", "org.freedesktop.systemd1.Unit", "Id"), + &reply); - if (!reply) { + if (ret < 0) { log_error("Failed to get \"Id\" property of %s", dbus_path); - return -ENOMEM; + return -EAGAIN; } g_variant_get(reply, "(s)", service_name); @@ -129,17 +131,19 @@ void systemd_service_cleanup(struct systemd_service *s) int systemd_get_unit_by_pid(pid_t pid, const char **name) { - GVariant *reply; + int ret; + GVariant *reply = NULL; assert(name); - reply = dbus_handle_method_sync_with_reply_var(SYSTEMD_SERVICE, + ret = dbus_handle_method_sync_with_reply_var(SYSTEMD_SERVICE, SYSTEMD_OBJ, SYSTEMD_MANAGER_INTERFACE, "GetUnitByPID", - g_variant_new("u", pid)); + g_variant_new("u", pid), + &reply); - if (!reply) { + if (ret < 0) { log_error("Failed to issue \"GetUnitByPID\" method call."); return -1; } diff --git a/src/decision_makers/unit_control_dm.c b/src/decision_makers/unit_control_dm.c index b7708df..826c88c 100644 --- a/src/decision_makers/unit_control_dm.c +++ b/src/decision_makers/unit_control_dm.c @@ -61,7 +61,8 @@ static int list_unit_by_pattern(const char *pattern, GVariant **reply) { assert(pattern); - GVariant *result; + int ret; + GVariant *result = NULL; char *patterns[2] = {}; char *unit_states[] = { "loaded", @@ -69,14 +70,15 @@ static int list_unit_by_pattern(const char *pattern, GVariant **reply) }; patterns[0] = (char *)pattern; - result = dbus_handle_method_sync_with_reply_var( + ret = dbus_handle_method_sync_with_reply_var( SYSTEMD_SERVICE, SYSTEMD_OBJ, SYSTEMD_MANAGER_INTERFACE, "ListUnitsByPatterns", - g_variant_new("(asas)", (char **)unit_states, (char **)patterns)); + g_variant_new("(asas)", (char **)unit_states, (char **)patterns), + &result); - if (!result) { + if (ret < 0) { log_error("Failed to issue ListUnitsByPatterns() call."); return -1; } diff --git a/src/util/systemd_dbus.c b/src/util/systemd_dbus.c index 2379f0a..8c9804c 100644 --- a/src/util/systemd_dbus.c +++ b/src/util/systemd_dbus.c @@ -53,6 +53,7 @@ int epc_dbus_call_async(char *service, char *obj, char *interface, char *method, int epc_dbus_call(char *service, char *obj, char *interface, char *method, char *types, ...) { + int ret, reply = 0; dbus_handle_h bus = NULL; GVariant *var = NULL; @@ -68,5 +69,9 @@ int epc_dbus_call(char *service, char *obj, char *interface, char *method, va_end(args); } - return dbus_handle_method_sync_var(service, obj, interface, method, var); + ret = dbus_handle_method_sync_var(service, obj, interface, method, var, &reply); + if (ret < 0) + return -EAGAIN; + else + return 0; } -- cgit v1.2.3