self->priv->signal_refreshed);
g_signal_handler_disconnect (self->priv->dbus_plugin_proxy,
self->priv->signal_status_changed);
- g_signal_handler_disconnect (self->priv->dbus_plugin_proxy,
- self->priv->signal_plugin_ready);
- g_object_unref (self->priv->dbus_plugin_proxy);
self->priv->dbus_plugin_proxy = NULL;
}
self->priv->plugin_mechanisms = NULL;
self->priv->cpid = 0;
self->priv->child_watch_id = 0;
- self->priv->plugin_ready = FALSE;
}
(GSignondPluginState)status, message);
}
-static void
-_plugin_ready_cb (
- GSignondPluginRemote *self,
- gpointer user_data)
-{
- g_return_if_fail (self && GSIGNOND_IS_PLUGIN_REMOTE (self));
-
- self->priv->plugin_ready = TRUE;
-}
-
static gboolean
_error_watch_cb (
GIOChannel *channel,
GSignondPluginRemote *plugin = NULL;
GSignondPipeStream *stream = NULL;
gboolean ret = FALSE;
- gint i;
/* Spawn child process */
argv = g_malloc0 ((3 + 1) * sizeof (gchar *));
plugin->priv->signal_status_changed = g_signal_connect_swapped (
plugin->priv->dbus_plugin_proxy, "status-changed",
G_CALLBACK(_status_changed_cb), plugin);
- plugin->priv->signal_plugin_ready = g_signal_connect_swapped (
- plugin->priv->dbus_plugin_proxy, "plugin-ready",
- G_CALLBACK(_plugin_ready_cb), plugin);
/* Create watch for error messages */
plugin->priv->err_watch_ch = g_io_channel_unix_new (cerr_fd);
g_io_channel_set_flags (plugin->priv->err_watch_ch, G_IO_FLAG_NONBLOCK,
NULL);
- /* To avoid race condition, so that remote dbus object is up before it can
- * be used
- * */
- for (i = 0; i < 100; i++) {
- if (!plugin->priv->plugin_ready) {
- g_usleep (10);
- g_main_context_iteration (NULL, FALSE);
- }
- }
-
- if (!plugin->priv->plugin_ready) {
- g_object_unref (plugin);
- return NULL;
- }
-
return plugin;
}
/* Create dbus connection */
stream = gsignond_pipe_stream_new (0, 1, FALSE);
daemon->priv->connection = g_dbus_connection_new_sync (G_IO_STREAM (stream),
- NULL, G_DBUS_CONNECTION_FLAGS_NONE, NULL, NULL, NULL);
+ NULL, G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING, NULL, NULL,
+ NULL);
g_object_unref (stream);
/* Create dbus object */
g_signal_connect (daemon->priv->connection, "closed",
G_CALLBACK(_on_connection_closed), daemon);
- gsignond_dbus_remote_plugin_emit_plugin_ready (
- daemon->priv->dbus_remote_plugin);
+ g_dbus_connection_start_message_processing (daemon->priv->connection);
return daemon;
}