diff options
author | Paweł Szewczyk <p.szewczyk@samsung.com> | 2019-07-29 13:46:23 +0200 |
---|---|---|
committer | Hyotaek Shim <hyotaek.shim@samsung.com> | 2019-08-13 09:32:03 +0000 |
commit | ba3d6a4b4e2cdde5349b3a3a18e55589c1c1db20 (patch) | |
tree | 352af4362f7020c84509f3724179191223b621ac | |
parent | b8e764834187c627f441c110fa4703d7bf6aedd0 (diff) | |
download | activationd-ba3d6a4b4e2cdde5349b3a3a18e55589c1c1db20.tar.gz activationd-ba3d6a4b4e2cdde5349b3a3a18e55589c1c1db20.tar.bz2 activationd-ba3d6a4b4e2cdde5349b3a3a18e55589c1c1db20.zip |
Switch to libsyscommon in unit_start actionsubmit/tizen/20190819.035335accepted/tizen/unified/20190819.081610
Change-Id: If5809e26cc1d508a8892c03057b7ad8a2f15bc93
Signed-off-by: Paweł Szewczyk <p.szewczyk@samsung.com>
-rw-r--r-- | include/systemd_dbus.h | 10 | ||||
-rw-r--r-- | src/action/unit_start.c | 47 | ||||
-rw-r--r-- | src/util/systemd_dbus.c | 54 |
3 files changed, 44 insertions, 67 deletions
diff --git a/include/systemd_dbus.h b/include/systemd_dbus.h index 96741b8..c9101cb 100644 --- a/include/systemd_dbus.h +++ b/include/systemd_dbus.h @@ -20,6 +20,7 @@ #define EPC_SYSTEMD_DBUS_H #include <systemd/sd-bus.h> +#include <libsyscommon/dbus-system.h> #define SYSTEMD_SERVICE "org.freedesktop.systemd1" @@ -32,24 +33,23 @@ #define SYSTEMD_KERNEL_BUS "kernel:path=/sys/fs/kdbus/0-system/bus" int epc_dbus_call(char *service, char *obj, char *interface, char *method, - sd_bus_error *error, sd_bus_message **out_msg, char *args, ...); #define epc_dbus_call_simple(SRV, OBJ, INTF, METHOD, ARGS, ...) \ - epc_dbus_call(SRV, OBJ, INTF, METHOD, NULL, NULL, ARGS, ##__VA_ARGS__) + epc_dbus_call(SRV, OBJ, INTF, METHOD, ARGS, ##__VA_ARGS__) #define epc_dbus_call_systemd_simple(OBJ, INTF, METHOD, ARGS, ...) \ epc_dbus_call_simple(SYSTEMD_SERVICE, OBJ, INTF, METHOD, \ ARGS, ##__VA_ARGS__) -typedef sd_bus_message_handler_t epc_dbus_handler_t; +typedef dbus_pending_cb epc_dbus_handler_t; int epc_dbus_call_async(char *service, char *obj, char *interface, char *method, - sd_bus_error *error, epc_dbus_handler_t cb, + epc_dbus_handler_t cb, void *user_data, char *args, ...); #define epc_dbus_call_simple_async(SRV, OBJ, INTF, METHOD, CB, DATA, ARGS, ...) \ - epc_dbus_call_async(SRV, OBJ, INTF, METHOD, NULL, CB, DATA, ARGS, ##__VA_ARGS__) + epc_dbus_call_async(SRV, OBJ, INTF, METHOD, CB, DATA, ARGS, ##__VA_ARGS__) #define epc_dbus_call_systemd_simple_async(OBJ, INTF, METHOD, CB, DATA, ARGS, ...) \ epc_dbus_call_simple_async(SYSTEMD_SERVICE, OBJ, INTF, METHOD, CB, DATA, \ diff --git a/src/action/unit_start.c b/src/action/unit_start.c index d8ff515..8db5ebd 100644 --- a/src/action/unit_start.c +++ b/src/action/unit_start.c @@ -24,11 +24,12 @@ #include "systemd_dbus.h" #include "common.h" +#include <libsyscommon/dbus-system.h> + struct unit_action_data { struct action_executed_event *exe_info; bool wait_for_unit; char *job; - sd_bus_slot *slot; }; static int finish_action(struct unit_action_data *data, int result, const char *err_msg) @@ -50,7 +51,13 @@ static int finish_action(struct unit_action_data *data, int result, const char * return ret; } -static int on_job_removed(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) +static void on_job_removed(GDBusConnection *connection, + const gchar *sender_name, + const gchar *object_path, + const gchar *interface_name, + const gchar *signal_name, + GVariant *parameters, + gpointer userdata) { struct unit_action_data *data = userdata; char *job; @@ -59,11 +66,7 @@ static int on_job_removed(sd_bus_message *m, void *userdata, sd_bus_error *ret_e if (!data) return -EINVAL; - ret = sd_bus_message_read(m, "uoss", NULL, &job, NULL, NULL); - if (ret < 0) { - log_error("Could not read JobRemoved signal"); - return -EINVAL; - } + g_variant_get(parameters, "(uoss)", NULL, &job, NULL, NULL); if (strcmp(data->job, job) == 0) finish_action(data, 0, NULL); @@ -71,33 +74,29 @@ static int on_job_removed(sd_bus_message *m, void *userdata, sd_bus_error *ret_e return 0; } -static int unit_action_handler(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) + +static int unit_action_handler(GVariant *var, void *userdata, GError *err) { struct unit_action_data *data = userdata; - _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL; + dbus_handle_h bus; int ret; char *s; - if (sd_bus_message_is_method_error(m, NULL)) { - ret = sd_bus_message_read(m, "s", &s); - if (ret < 0) - s = NULL; - return finish_action(data, -sd_bus_message_get_errno(m), s); - } + if (err) + return finish_action(data, -err->code, err->message); if (!data) return -EINVAL; - ret = epc_acquire_systemd_bus(&bus); - if (ret < 0) - return finish_action(data, ret, "Could not acquire systemd bus"); + bus = dbus_handle_get_connection(G_BUS_TYPE_SYSTEM, 0); + if (!bus) + return finish_action(data, -EINVAL, "Could not acquire systemd bus"); if (data->wait_for_unit) { - ret = sd_bus_add_match(bus, &data->slot, - "type='signal',sender='org.freedesktop.systemd1'," - "interface='org.freedesktop.systemd1.Manager'," - "member='JobRemoved'," - "path_namespace='/org/freedesktop/systemd1'", + ret = subscribe_dbus_signal(bus, NULL, + "sender='org.freedesktop.systemd1", + "org.freedesktop.systemd1.Manager", + "JobRemoved", on_job_removed, data); if (ret < 0) { @@ -162,7 +161,7 @@ static int start_unit(struct epc_action *action, unit_action, unit_action_handler, data, - "ss", + "(ss)", unit_name, "replace"); if (ret < 0) diff --git a/src/util/systemd_dbus.c b/src/util/systemd_dbus.c index 712ac33..6a18318 100644 --- a/src/util/systemd_dbus.c +++ b/src/util/systemd_dbus.c @@ -21,6 +21,7 @@ #include <sys/types.h> #include <sys/socket.h> #include <errno.h> +#include <libsyscommon/dbus-system.h> #include "common.h" #include "systemd_dbus.h" @@ -30,72 +31,49 @@ static sd_bus *systemd_bus = NULL; static bool epc_systemd_private = false; int epc_dbus_call_async(char *service, char *obj, char *interface, char *method, - sd_bus_error *error, epc_dbus_handler_t cb, + epc_dbus_handler_t cb, void *user_data, char *types, ...) { - _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; + dbus_handle_h bus = NULL; int ret; + GVariant *var = NULL; - ret = epc_acquire_systemd_bus(&bus); - if (ret < 0) - return ret; + bus = dbus_handle_get_connection(G_BUS_TYPE_SYSTEM, 0); + if (!bus) + return -EINVAL; - ret = sd_bus_message_new_method_call(bus, &m, service, obj, interface, method); - if (ret < 0) - goto fail; if (types) { va_list args; va_start(args, types); - ret = sd_bus_message_appendv(m, types, args); + var = g_variant_new_va(types, NULL, &args); va_end(args); - if (ret < 0) - goto fail; } - return sd_bus_call_async(bus, NULL, m, cb, user_data, 0); - -fail: - return ret; + return dbus_handle_method_async_with_reply_var(service, obj, interface, method, var, cb, -1, user_data); } int epc_dbus_call(char *service, char *obj, char *interface, char *method, - sd_bus_error *error, sd_bus_message **out_msg, char *types, ...) { - _cleanup_(sd_bus_unrefp) sd_bus *bus = NULL; - _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; - _cleanup_(sd_bus_error_free) sd_bus_error error_buf = SD_BUS_ERROR_NULL; + dbus_handle_h bus = NULL; int ret; + GVariant *var = NULL; - if (!error) - error = &error_buf; - - ret = epc_acquire_systemd_bus(&bus); - if (ret < 0) - return ret; - - ret = sd_bus_message_new_method_call(bus, &m, service, - obj, interface, method); - if (ret < 0) - goto fail; + bus = dbus_handle_get_connection(G_BUS_TYPE_SYSTEM, 0); + if (!bus) + return -EINVAL; if (types) { va_list args; va_start(args, types); - ret = sd_bus_message_appendv(m, types, args); + var = g_variant_new(types, NULL, args); va_end(args); - if (ret < 0) - goto fail; } - return sd_bus_call(bus, m, 0, error, out_msg); - -fail: - return sd_bus_error_set_errno(error, ret); + return dbus_handle_method_sync_var(service, obj, interface, method, var); } static int get_bus_by_address(const char *addr, sd_bus **bus) |