}
for (int i = 0 ; i < EDBUS_INIT_RETRY_COUNT; ++i) {
- ret = dbus_handle_request_bus_name(handle, DEVICED_BUS_NAME);
+ ret = dbus_handle_request_bus_name(handle, DEVICED_BUS_NAME, NULL, NULL);
if (ret > 0)
break;
_E("failed to request bus name:retry %d", i);
_E("aw_notify failed(%d)", ret);
}
-static gboolean watchdog_cb(void *data)
-{
- watchdog_notify();
- return G_SOURCE_CONTINUE;
-}
-
-static gboolean deviced_main_cb(void *data)
+static void deviced_dbus_name_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data)
{
int ret;
- guint timer;
-
ret = booting_finished();
if (ret == 1) {
_I("notify relaunch");
device_notify(DEVICE_NOTIFIER_BOOTING_DONE, &ret);
}
- signal(SIGTERM, sig_quit);
- signal(SIGUSR1, sig_usr1);
-
- timer = g_timeout_add_seconds(WATCHDOG_TIMEOUT, watchdog_cb, NULL);
- if (timer) {
- ret = aw_register(WATCHDOG_TIMEOUT * 2);
- if (ret < 0)
- _E("aw_register failed");
- }
_I("sd_notify(READY=1)");
sd_notify(0, "READY=1");
+}
- return G_SOURCE_REMOVE;
+static gboolean watchdog_cb(void *data)
+{
+ watchdog_notify();
+ return G_SOURCE_CONTINUE;
}
static int deviced_main(int argc, char **argv)
{
int ret;
+ guint timer;
mainloop = g_main_loop_new(NULL, FALSE);
if (ret)
return 0;
- if (!dbus_handle_init(G_BUS_TYPE_SYSTEM, DEVICED_BUS_NAME)) {
+ if (!dbus_handle_init(G_BUS_TYPE_SYSTEM, DEVICED_BUS_NAME, deviced_dbus_name_acquired, NULL)) {
_E("failed to init dbus connection");
}
devices_init(NULL);
- ret = g_timeout_add(0, deviced_main_cb, NULL);
- if (ret <= 0) {
- _E("failed to add timeout source for deviced_main_cb");
- return 0;
+ signal(SIGTERM, sig_quit);
+ signal(SIGUSR1, sig_usr1);
+
+ timer = g_timeout_add_seconds_full(G_PRIORITY_HIGH, WATCHDOG_TIMEOUT, watchdog_cb, NULL, NULL);
+ if (timer) {
+ ret = aw_register(WATCHDOG_TIMEOUT * 2);
+ if (ret < 0)
+ _E("aw_register failed");
}
/* g_main_loop */
dbus_handle_unlock(dh);
}
+extern void booting_done(void);
+
static void _name_acquired(GDBusConnection *connection, const gchar *name, gpointer user_data)
{
dbus_handle_s *dh = (dbus_handle_s *)user_data;
_E("%s:%d:dbus handle is null\n", __func__, __LINE__);
return ;
}
+
// todo: add bus name?
//dh->bus_name = name;
}
_dbus_handle_remove_bus_name(dh, name);
}
-int dbus_handle_request_bus_name(dbus_handle_h handle, const char *bus_name)
+int dbus_handle_request_bus_name(dbus_handle_h handle, const char *bus_name,
+ GBusNameAcquiredCallback acquired_handler, GBusNameLostCallback lost_handler)
{
dcl_dbus_handle();
int id = -1;
goto out;
}
- id = g_bus_own_name_on_connection(dh->conn, bus_name, G_BUS_NAME_OWNER_FLAGS_NONE, _name_acquired, _name_lost, dh, NULL);
+ id = g_bus_own_name_on_connection(dh->conn, bus_name, G_BUS_NAME_OWNER_FLAGS_NONE,
+ acquired_handler ? acquired_handler : _name_acquired,
+ lost_handler ? lost_handler : _name_lost, dh, NULL);
if (!id) {
_E("failed to own name:%s\n", bus_name);
goto out;
g_strfreev(strv);
}
-dbus_handle_h dbus_handle_init(GBusType type, const char* bus_name)
+dbus_handle_h dbus_handle_init(GBusType type, const char* bus_name,
+ GBusNameAcquiredCallback acquired_handler, GBusNameLostCallback lost_handler)
{
dbus_handle_h handle = NULL;
int i, ret = 0;
break;
usleep(5000);
}
- ret = dbus_handle_request_bus_name(handle, bus_name);
+ ret = dbus_handle_request_bus_name(handle, bus_name, acquired_handler, lost_handler);
if (ret <= 0)
goto out;
void *data;
} pending_call_data;
-int dbus_handle_request_bus_name(dbus_handle_h handle, const char *bus_name);
+int dbus_handle_request_bus_name(dbus_handle_h handle, const char *bus_name, GBusNameAcquiredCallback acquired_handler, GBusNameLostCallback lost_handler);
dbus_handle_h dbus_handle_get_connection(GBusType bus_type, gboolean priv);
int dbus_handle_get_sender_credentials(dbus_handle_h handle, const char *name, GDBusCredentials *creds);
int dbus_handle_watch_name(const char *name, GBusNameAppearedCallback name_appeared_handler, GBusNameVanishedCallback name_vanished_handler, void *user_data);
void dbus_handle_unwatch_name(guint id);
-dbus_handle_h dbus_handle_init(GBusType type, const char* bus_name);
+dbus_handle_h dbus_handle_init(GBusType type, const char* bus_name, GBusNameAcquiredCallback acquired_handler, GBusNameLostCallback lost_handler);
char** dbus_handle_get_owner_list(dbus_handle_h handle, const char *bus_name);
void dbush_handle_check_owner_name(dbus_handle_h handle, const char *owner_name);