[balsa] Lock mailbox while accessing an idle callback id



commit 37e3aa1420b5d656c91614cd313538581d8eb1da
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Fri Mar 10 12:34:51 2017 -0500

    Lock mailbox while accessing an idle callback id
    
        * libbalsa/mailbox.c (lbm_need_threading_idle_cb),
        (libbalsa_mailbox_msgno_inserted),
        (libbalsa_mailbox_msgno_removed): lock mailbox while accessing
        need_threading_idle_id.

 ChangeLog          |    9 +++++++++
 libbalsa/mailbox.c |    8 ++++++++
 2 files changed, 17 insertions(+), 0 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index fd055d0..fd4c4c9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2017-03-10  Peter Bloomfield  <pbloomfield bellsouth net>
+
+       Lock mailbox while accessing an idle callback id
+
+       * libbalsa/mailbox.c (lbm_need_threading_idle_cb),
+       (libbalsa_mailbox_msgno_inserted),
+       (libbalsa_mailbox_msgno_removed): lock mailbox while accessing
+       need_threading_idle_id.
+
 2017-03-04  Peter Bloomfield  <pbloomfield bellsouth net>
 
        * src/main-window.c (bw_master_position_cb),
diff --git a/libbalsa/mailbox.c b/libbalsa/mailbox.c
index 5c6facc..2a10b23 100644
--- a/libbalsa/mailbox.c
+++ b/libbalsa/mailbox.c
@@ -1319,10 +1319,14 @@ libbalsa_mailbox_msgno_changed(LibBalsaMailbox * mailbox, guint seqno)
 static gboolean
 lbm_need_threading_idle_cb(LibBalsaMailbox *mailbox)
 {
+    libbalsa_lock_mailbox(mailbox);
+
     lbm_set_threading(mailbox, mailbox->view->threading_type);
 
     mailbox->need_threading_idle_id = 0;
 
+    libbalsa_unlock_mailbox(mailbox);
+
     return FALSE;
 }
 
@@ -1357,10 +1361,12 @@ libbalsa_mailbox_msgno_inserted(LibBalsaMailbox *mailbox, guint seqno,
         gtk_tree_path_free(path);
     }
 
+    libbalsa_lock_mailbox(mailbox);
     if (mailbox->need_threading_idle_id == 0) {
         mailbox->need_threading_idle_id =
             g_idle_add((GSourceFunc) lbm_need_threading_idle_cb, mailbox);
     }
+    libbalsa_unlock_mailbox(mailbox);
 
     mailbox->msg_tree_changed = TRUE;
     gdk_threads_leave();
@@ -1479,10 +1485,12 @@ libbalsa_mailbox_msgno_removed(LibBalsaMailbox * mailbox, guint seqno)
         gtk_tree_path_next(path);
     }
 
+    libbalsa_lock_mailbox(mailbox);
     if (mailbox->need_threading_idle_id == 0) {
         mailbox->need_threading_idle_id =
             g_idle_add((GSourceFunc) lbm_need_threading_idle_cb, mailbox);
     }
+    libbalsa_unlock_mailbox(mailbox);
 
     /* Now it's safe to destroy the node. */
     g_node_destroy(dt.node);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]