[balsa/gtk3] Ref count LibBalsaMailboxSearchIter
- From: Peter Bloomfield <PeterB src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa/gtk3] Ref count LibBalsaMailboxSearchIter
- Date: Mon, 11 Jun 2012 22:08:44 +0000 (UTC)
commit 7c3f93e03850941a7c32aef822fc2111464e528c
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Mon Jun 11 18:07:42 2012 -0400
Ref count LibBalsaMailboxSearchIter
* libbalsa/mailbox.c (libbalsa_mailbox_run_filters_on_reception),
(libbalsa_mailbox_msgno_filt_check),
(libbalsa_mailbox_search_iter_new),
(libbalsa_mailbox_search_iter_ref),
(libbalsa_mailbox_search_iter_unref),
(libbalsa_mailbox_messages_change_flags): ref count
LibBalsaMailboxSearchIter, and unref it instead of free.
* libbalsa/mailbox.h: new member ref_count.
* libbalsa/mailbox_local.c (lbm_local_update_view_filter): unref
LibBalsaMailboxSearchIter instead of free.
* src/balsa-index.c (bndx_destroy),
(bndx_select_next_with_flag): ditto.
* src/filter-run-callbacks.c (run_filters_on_mailbox): ditto.
* src/main-window.c: ditto.
ChangeLog | 19 +++++++++++++++++++
libbalsa/mailbox.c | 30 +++++++++++++++++++++++-------
libbalsa/mailbox.h | 17 ++++++++++-------
libbalsa/mailbox_local.c | 2 +-
src/balsa-index.c | 4 ++--
src/filter-run-callbacks.c | 2 +-
src/main-window.c | 2 +-
7 files changed, 57 insertions(+), 19 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index c684b5f..fce7b28 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+2012-06-11 Peter Bloomfield
+
+ Ref count LibBalsaMailboxSearchIter
+
+ * libbalsa/mailbox.c (libbalsa_mailbox_run_filters_on_reception),
+ (libbalsa_mailbox_msgno_filt_check),
+ (libbalsa_mailbox_search_iter_new),
+ (libbalsa_mailbox_search_iter_ref),
+ (libbalsa_mailbox_search_iter_unref),
+ (libbalsa_mailbox_messages_change_flags): ref count
+ LibBalsaMailboxSearchIter, and unref it instead of free.
+ * libbalsa/mailbox.h: new member ref_count.
+ * libbalsa/mailbox_local.c (lbm_local_update_view_filter): unref
+ LibBalsaMailboxSearchIter instead of free.
+ * src/balsa-index.c (bndx_destroy),
+ (bndx_select_next_with_flag): ditto.
+ * src/filter-run-callbacks.c (run_filters_on_mailbox): ditto.
+ * src/main-window.c: ditto.
+
2012-06-10 Peter Bloomfield
* libbalsa/libbalsa.c (libbalsa_scanner_error_quark),
diff --git a/libbalsa/mailbox.c b/libbalsa/mailbox.c
index 4519693..50e43f5 100644
--- a/libbalsa/mailbox.c
+++ b/libbalsa/mailbox.c
@@ -898,7 +898,7 @@ libbalsa_mailbox_run_filters_on_reception(LibBalsaMailbox * mailbox)
/
((gdouble) progress_total));
}
- libbalsa_mailbox_search_iter_free(search_iter);
+ libbalsa_mailbox_search_iter_unref(search_iter);
libbalsa_mailbox_register_msgnos(mailbox, msgnos);
libbalsa_filter_mailbox_messages(filter, mailbox, msgnos);
@@ -1780,7 +1780,7 @@ libbalsa_mailbox_msgno_filt_check(LibBalsaMailbox * mailbox, guint seqno,
info = g_slice_new(LbmMsgnoFiltCheckInfo);
info->mailbox = g_object_ref(mailbox);
info->seqno = seqno;
- info->search_iter = search_iter;
+ info->search_iter = libbalsa_mailbox_search_iter_ref(search_iter);
info->hold_selected = hold_selected;
g_idle_add((GSourceFunc) lbm_msgno_filt_check_idle_cb, info);
} else
@@ -1799,11 +1799,12 @@ libbalsa_mailbox_search_iter_new(LibBalsaCondition * condition)
if (!condition)
return NULL;
- iter = g_new(LibBalsaMailboxSearchIter, 1);
+ iter = g_slice_new(LibBalsaMailboxSearchIter);
iter->mailbox = NULL;
iter->stamp = 0;
iter->condition = libbalsa_condition_ref(condition);
iter->user_data = NULL;
+ iter->ref_count = 1;
return iter;
}
@@ -1817,12 +1818,27 @@ libbalsa_mailbox_search_iter_view(LibBalsaMailbox * mailbox)
return libbalsa_mailbox_search_iter_new(mailbox->view_filter);
}
+/* Increment reference count of a LibBalsaMailboxSearchIter, if it is
+ * valid */
+LibBalsaMailboxSearchIter *
+libbalsa_mailbox_search_iter_ref(LibBalsaMailboxSearchIter * search_iter)
+{
+ g_return_val_if_fail(search_iter != NULL, NULL);
+ g_return_val_if_fail(search_iter->ref_count > 0, NULL);
+
+ ++search_iter->ref_count;
+
+ return search_iter;
+}
+
+/* Decrement reference count of a LibBalsaMailboxSearchIter, if it is
+ * non-NULL and validi, and free it if it goes to zero */
void
-libbalsa_mailbox_search_iter_free(LibBalsaMailboxSearchIter * search_iter)
+libbalsa_mailbox_search_iter_unref(LibBalsaMailboxSearchIter * search_iter)
{
LibBalsaMailbox *mailbox;
- if (!search_iter)
+ if (!search_iter || --search_iter->ref_count > 0)
return;
mailbox = search_iter->mailbox;
@@ -1830,7 +1846,7 @@ libbalsa_mailbox_search_iter_free(LibBalsaMailboxSearchIter * search_iter)
LIBBALSA_MAILBOX_GET_CLASS(mailbox)->search_iter_free(search_iter);
libbalsa_condition_unref(search_iter->condition);
- g_free(search_iter);
+ g_slice_free(LibBalsaMailboxSearchIter, search_iter);
}
/* GNode iterators; they return the root node when they run out of nodes,
@@ -2224,7 +2240,7 @@ libbalsa_mailbox_messages_change_flags(LibBalsaMailbox * mailbox,
libbalsa_mailbox_msgno_filt_check(mailbox, msgno, iter_view,
TRUE);
}
- libbalsa_mailbox_search_iter_free(iter_view);
+ libbalsa_mailbox_search_iter_unref(iter_view);
}
if (real_flag)
diff --git a/libbalsa/mailbox.h b/libbalsa/mailbox.h
index 43f9230..109a40a 100644
--- a/libbalsa/mailbox.h
+++ b/libbalsa/mailbox.h
@@ -264,9 +264,10 @@ struct _LibBalsaMailbox {
/* Search iter */
struct _LibBalsaMailboxSearchIter {
- LibBalsaMailbox *mailbox;
+ gint ref_count;
gint stamp;
- LibBalsaCondition *condition;
+ LibBalsaMailbox *mailbox;
+ LibBalsaCondition *condition;
gpointer user_data; /* private backend info */
};
@@ -443,17 +444,19 @@ gboolean libbalsa_mailbox_message_match(LibBalsaMailbox *mailbox,
LibBalsaMailboxSearchIter *search_iter);
/* Search iter */
-LibBalsaMailboxSearchIter *libbalsa_mailbox_search_iter_new(LibBalsaCondition
- * condition);
-LibBalsaMailboxSearchIter *libbalsa_mailbox_search_iter_view(LibBalsaMailbox
- * mailbox);
+LibBalsaMailboxSearchIter
+ *libbalsa_mailbox_search_iter_new(LibBalsaCondition * condition);
+LibBalsaMailboxSearchIter
+ *libbalsa_mailbox_search_iter_view(LibBalsaMailbox * mailbox);
+LibBalsaMailboxSearchIter
+ *libbalsa_mailbox_search_iter_ref(LibBalsaMailboxSearchIter * iter);
+void libbalsa_mailbox_search_iter_unref(LibBalsaMailboxSearchIter * iter);
gboolean libbalsa_mailbox_search_iter_step(LibBalsaMailbox * mailbox,
LibBalsaMailboxSearchIter
* search_iter,
GtkTreeIter * iter,
gboolean forward,
guint stop_msgno);
-void libbalsa_mailbox_search_iter_free(LibBalsaMailboxSearchIter * iter);
/* Default filtering function (on reception)
It is ONLY FOR INTERNAL USE
diff --git a/libbalsa/mailbox_local.c b/libbalsa/mailbox_local.c
index 62733e1..8eccfa6 100644
--- a/libbalsa/mailbox_local.c
+++ b/libbalsa/mailbox_local.c
@@ -1208,7 +1208,7 @@ lbm_local_update_view_filter(LibBalsaMailbox * mailbox,
((gdouble) total));
}
libbalsa_progress_set_text(&progress, NULL, 0);
- libbalsa_mailbox_search_iter_free(iter_view);
+ libbalsa_mailbox_search_iter_unref(iter_view);
/* If this is not a flags-only filter, the new mailbox tree is
* temporary, so we don't want to save it. */
diff --git a/src/balsa-index.c b/src/balsa-index.c
index 40bdb6f..18ed789 100644
--- a/src/balsa-index.c
+++ b/src/balsa-index.c
@@ -239,7 +239,7 @@ bndx_destroy(GObject * obj)
}
if (index->search_iter) {
- libbalsa_mailbox_search_iter_free(index->search_iter);
+ libbalsa_mailbox_search_iter_unref(index->search_iter);
index->search_iter = NULL;
}
@@ -1398,7 +1398,7 @@ bndx_select_next_with_flag(BalsaIndex * index, LibBalsaMessageFlag flag)
BNDX_SEARCH_START_ANY,
BNDX_SEARCH_WRAP_YES);
- libbalsa_mailbox_search_iter_free(search_iter);
+ libbalsa_mailbox_search_iter_unref(search_iter);
return retval;
}
diff --git a/src/filter-run-callbacks.c b/src/filter-run-callbacks.c
index a69cd58..fca6266 100644
--- a/src/filter-run-callbacks.c
+++ b/src/filter-run-callbacks.c
@@ -121,7 +121,7 @@ run_filters_on_mailbox(GSList * filters, LibBalsaMailbox * mbox)
msgno++)
if (libbalsa_mailbox_message_match(mbox, msgno, search_iter))
g_array_append_val(messages, msgno);
- libbalsa_mailbox_search_iter_free(search_iter);
+ libbalsa_mailbox_search_iter_unref(search_iter);
libbalsa_mailbox_register_msgnos(mbox, messages);
sent_to_trash +=
diff --git a/src/main-window.c b/src/main-window.c
index 5074bc8..fc0b1fe 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -4452,7 +4452,7 @@ bw_find_real(BalsaWindow * window, BalsaIndex * bindex, gboolean again)
return;
cnd->type = CONDITION_STRING;
- libbalsa_mailbox_search_iter_free(search_iter);
+ libbalsa_mailbox_search_iter_unref(search_iter);
search_iter = NULL;
if(ok == FIND_RESPONSE_FILTER) {
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]