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,
#include <errno.h>
#include <stdbool.h>
+#include <systemd/sd-daemon.h>
#include <pass/gdbus-util.h>
#include <pass/log.h>
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)
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;
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;
if (g_dbus_sys_conn[idx]) {
g_object_unref(g_dbus_sys_conn[idx]);
g_dbus_sys_conn[idx] = NULL;
+ dbus_name_owned--;
}
}
#include <string.h>
#include <gio/gio.h>
#include <sys/reboot.h>
-#include <systemd/sd-daemon.h>
#include <pass/common.h>
#include <pass/device-notifier.h>
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;
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;
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;