[balsa] Do not access a stale pointer
- From: Peter Bloomfield <peterb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [balsa] Do not access a stale pointer
- Date: Thu, 9 Feb 2017 03:55:27 +0000 (UTC)
commit 3759b5298c4221a67aa3baed9766f84820d61ba3
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date: Wed Feb 8 22:54:51 2017 -0500
Do not access a stale pointer
* src/main-window.c (balsa_window_destroy): nullify window->preview;
(bw_action_set_enabled): check for NULL window->preview;
(bw_idle_replace): ditto.
ChangeLog | 8 ++++++++
src/main-window.c | 25 +++++++++++++++++--------
2 files changed, 25 insertions(+), 8 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 0b75e88..f52dfa9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-02-08 Peter Bloomfield <pbloomfield bellsouth net>
+
+ Do not access a stale pointer
+
+ * src/main-window.c (balsa_window_destroy): nullify window->preview;
+ (bw_action_set_enabled): check for NULL window->preview;
+ (bw_idle_replace): ditto.
+
2017-01-24 Peter Bloomfield <pbloomfield bellsouth net>
Fix some conditional compilation code so that uncrustify does
diff --git a/src/main-window.c b/src/main-window.c
index a950ad1..8467cb1 100644
--- a/src/main-window.c
+++ b/src/main-window.c
@@ -768,7 +768,8 @@ bw_action_set_enabled(BalsaWindow * window,
{
GAction *action;
- if (g_object_get_data(G_OBJECT(window), "destroying"))
+ /* Is the window being destroyed? */
+ if (window->preview == NULL)
return;
action = bw_get_action(window, action_name);
@@ -3088,10 +3089,15 @@ bw_close_mailbox_on_timer(BalsaWindow * window)
static void
balsa_window_destroy(GObject * object)
{
- g_object_set_data(object, "destroying", GINT_TO_POINTER(TRUE));
- bw_idle_remove(BALSA_WINDOW(object));
+ BalsaWindow *window;
+
+ window = BALSA_WINDOW(object);
+ bw_idle_remove(window);
+ /* The preview window seems to get finalized without notification;
+ * we no longer need it, so we just drop our pointer: */
+ window->preview = NULL;
- if (G_OBJECT_CLASS(balsa_window_parent_class)->dispose)
+ if (G_OBJECT_CLASS(balsa_window_parent_class)->dispose != NULL)
G_OBJECT_CLASS(balsa_window_parent_class)->dispose(object);
balsa_unregister_pixmaps();
@@ -4435,10 +4441,13 @@ bw_idle_replace(BalsaWindow * window, BalsaIndex * bindex)
{
if (balsa_app.previewpane) {
bw_idle_remove(window);
- window->set_message_id =
- gdk_threads_add_idle((GSourceFunc) bw_idle_cb, window);
- if (BALSA_MESSAGE(window->preview)->message)
- gtk_widget_hide(window->preview);
+ /* Skip if the window is being destroyed: */
+ if (window->preview != NULL) {
+ window->set_message_id =
+ gdk_threads_add_idle((GSourceFunc) bw_idle_cb, window);
+ if (BALSA_MESSAGE(window->preview)->message != NULL)
+ gtk_widget_hide(window->preview);
+ }
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]