object_class->finalize = _finalize;
}
-static gboolean
-_on_remove_identity (GSignondIdentity *identity, gpointer data)
-{
- GSignondDaemon *daemon = GSIGNOND_DAEMON (data);
-
- if (gsignond_db_credentials_database_remove_identity (daemon->priv->db,
- gsignond_identity_get_id (identity)) == TRUE) {
-
- g_object_unref (G_OBJECT (identity));
-
- return TRUE;
- }
-
- return FALSE;
-}
-
static void
_on_identity_disposed (gpointer data, GObject *object)
{
g_signal_connect_swapped (identity, "store",
G_CALLBACK (gsignond_db_credentials_database_update_identity), daemon->priv->db);
+ g_signal_connect_swapped (identity, "remove",
+ G_CALLBACK(gsignond_db_credentials_database_remove_identity), daemon->priv->db);
- g_signal_connect (identity, "remove",
- G_CALLBACK (_on_remove_identity), daemon);
}
static const gchar *
_auto_dispose, self);
}
+void
+gsignond_disposable_delete_later (GSignondDisposable *self)
+{
+ if (self->priv->timer_id)
+ g_source_remove (self->priv->timer_id);
+
+ INFO ("Object '%s' about to dispose...", G_OBJECT_TYPE_NAME (self));
+ self->priv->timer_id = g_idle_add (_auto_dispose, self);
+}
+
gsignond_disposable_set_timeout (GSignondDisposable *self,
guint timeout);
+void
+gsignond_disposable_delete_later (GSignondDisposable *self);
+
G_END_DECLS
#endif /* __GSIGNOND_DISPOSABLE_H_ */
else if (error)
*error = gsignond_get_gerror_for_id (GSIGNOND_ERROR_REMOVE_FAILED, "failed to remove identity");
- gsignond_disposable_set_keep_in_use (GSIGNOND_DISPOSABLE (identity));
+ gsignond_disposable_delete_later (GSIGNOND_DISPOSABLE (identity));
return is_removed;
}