From 53a3d3eefa64992aa665d26665fe1763ae41fe9a Mon Sep 17 00:00:00 2001 From: Dongwoo Lee Date: Thu, 18 Jul 2019 10:51:12 +0900 Subject: [PATCH] core: sd_notify() when all dbus name is owned If pass is waken-up by thermal method call, sd_notify() should be called after all dbus name is successfully owned including thermal dbus. To handle this case, this patch refactors name acquired event callback. Change-Id: I88549a81aaa38082c3d7e53c995d9f62145a6266 Signed-off-by: Dongwoo Lee --- include/pass/gdbus-util.h | 3 +-- src/core/gdbus-util.c | 15 ++++++++++++--- src/core/main.c | 10 +--------- src/thermal/thermal.c | 3 +-- 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/include/pass/gdbus-util.h b/include/pass/gdbus-util.h index 0efbd68..2f8e078 100644 --- a/include/pass/gdbus-util.h +++ b/include/pass/gdbus-util.h @@ -42,8 +42,7 @@ int pass_gdbus_unregister_systemd_startup_callback(guint id); int pass_gdbus_get_systemd_dbus_property_string(const char *iface, const char *prop, const char **value); int pass_gdbus_export_interface(passdbus idx, gpointer instance, const char *obj_path); -int pass_gdbus_get_name(passdbus idx, const char *name, - GBusNameAcquiredCallback gdbus_name_cb); +int pass_gdbus_get_name(passdbus idx, const char *name); int pass_gdbus_connect_signal(gpointer instance, int num_signals, struct pass_gdbus_signal_info *signal_infos); void pass_gdbus_disconnect_signal(gpointer instance, int num_signals, diff --git a/src/core/gdbus-util.c b/src/core/gdbus-util.c index 147e508..eca425d 100644 --- a/src/core/gdbus-util.c +++ b/src/core/gdbus-util.c @@ -18,11 +18,13 @@ #include #include +#include #include #include static GDBusConnection *g_dbus_sys_conn[PASS_DBUS_MAX] = {NULL, }; +static int dbus_name_owned; int pass_gdbus_export_interface(passdbus idx, gpointer instance, const char *obj_path) @@ -51,8 +53,14 @@ int pass_gdbus_export_interface(passdbus idx, gpointer instance, return -1; } -int pass_gdbus_get_name(passdbus idx, const char *name, - GBusNameAcquiredCallback gdbus_name_cb) +static void pass_name_acquired_cb(GDBusConnection *connection, + const gchar *name, gpointer user_data) +{ + if (++dbus_name_owned == PASS_DBUS_MAX) + sd_notify(0, "READY=1"); +} + +int pass_gdbus_get_name(passdbus idx, const char *name) { guint id; @@ -63,7 +71,7 @@ int pass_gdbus_get_name(passdbus idx, const char *name, id = g_bus_own_name_on_connection(g_dbus_sys_conn[idx], name, G_BUS_NAME_OWNER_FLAGS_NONE, - gdbus_name_cb, NULL, NULL, NULL); + pass_name_acquired_cb, NULL, NULL, NULL); if (id == 0) return -ENOSYS; @@ -224,5 +232,6 @@ void pass_gdbus_put_system_connection(passdbus idx) if (g_dbus_sys_conn[idx]) { g_object_unref(g_dbus_sys_conn[idx]); g_dbus_sys_conn[idx] = NULL; + dbus_name_owned--; } } diff --git a/src/core/main.c b/src/core/main.c index f78e6c6..d93a23c 100644 --- a/src/core/main.c +++ b/src/core/main.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include @@ -44,12 +43,6 @@ static void sig_usr1(int signo) g_main_loop_quit(g_mainloop); } -static void pass_name_acquired_cb(GDBusConnection *connection, - const gchar *name, gpointer user_data) -{ - sd_notify(0, "READY=1"); -} - static int late_init(void) { int ret; @@ -57,8 +50,7 @@ static int late_init(void) signal(SIGTERM, sig_quit); signal(SIGUSR1, sig_usr1); - ret = pass_gdbus_get_name(PASS_DBUS_CORE, - DBUS_PASS_BUS_NAME, pass_name_acquired_cb); + ret = pass_gdbus_get_name(PASS_DBUS_CORE, DBUS_PASS_BUS_NAME); if (ret < 0) return ret; diff --git a/src/thermal/thermal.c b/src/thermal/thermal.c index 2858248..18c8eea 100644 --- a/src/thermal/thermal.c +++ b/src/thermal/thermal.c @@ -328,8 +328,7 @@ static int thermal_probe(void *data) goto out; } - ret = pass_gdbus_get_name(PASS_DBUS_THERMAL, - DBUS_THERMAL_BUS_NAME, NULL); + ret = pass_gdbus_get_name(PASS_DBUS_THERMAL, DBUS_THERMAL_BUS_NAME); if (ret < 0) { _E("Failed to own dbus name '%s'\n", DBUS_THERMAL_BUS_NAME); ret = -EINVAL; -- 2.34.1