diff --git a/lib/wp/session-bin.c b/lib/wp/session-bin.c index 30d77b373d0844bc241fb9eca926bf3118413634..a84ceae1b48d0d010b7ef9022d509d0d80e2f574 100644 --- a/lib/wp/session-bin.c +++ b/lib/wp/session-bin.c @@ -148,24 +148,24 @@ static gboolean wp_session_bin_iterator_next (WpIterator *iterator, GValue *item) { WpSessionBinIterator *self = wp_iterator_get_user_data (iterator); - WpSessionBinPrivate *bin_priv = wp_session_bin_get_instance_private (self->bin); - if (self->index >= bin_priv->items->len) - return FALSE; + WpSessionBinPrivate *priv = wp_session_bin_get_instance_private (self->bin); + + g_return_val_if_fail (item, FALSE); - if (item) { - g_value_init (item, G_TYPE_OBJECT); - g_value_set_object (item, - g_ptr_array_index (bin_priv->items, self->index++)); + if (self->index < priv->items->len) { + g_value_init_from_instance (item, + g_ptr_array_index (priv->items, self->index++)); + return TRUE; } - return TRUE; + return FALSE; } static void wp_session_bin_iterator_finalize (WpIterator *iterator) { WpSessionBinIterator *self = wp_iterator_get_user_data (iterator); - self->bin = NULL; + g_clear_object (&self->bin); } /** @@ -190,7 +190,7 @@ wp_session_bin_iterate (WpSessionBin *self) WpIterator *ret = wp_iterator_new (&methods, sizeof (WpSessionBinIterator)); WpSessionBinIterator *it = wp_iterator_get_user_data (ret); - it->bin = self; + it->bin = g_object_ref (self); return ret; }