aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXan Lopez <xan@gnome.org>2009-10-23 01:06:54 +0800
committerXan Lopez <xan@gnome.org>2009-10-23 01:24:19 +0800
commit7a31887b89005519fcb012cce53adc2a6402d066 (patch)
tree14a1abb5f061923d407db31ef5d5209e28845b6c
parent7a31aae32f3638ec99f432795f5c721b60e67268 (diff)
downloadgsoc2013-epiphany-7a31887b89005519fcb012cce53adc2a6402d066.tar
gsoc2013-epiphany-7a31887b89005519fcb012cce53adc2a6402d066.tar.gz
gsoc2013-epiphany-7a31887b89005519fcb012cce53adc2a6402d066.tar.bz2
gsoc2013-epiphany-7a31887b89005519fcb012cce53adc2a6402d066.tar.lz
gsoc2013-epiphany-7a31887b89005519fcb012cce53adc2a6402d066.tar.xz
gsoc2013-epiphany-7a31887b89005519fcb012cce53adc2a6402d066.tar.zst
gsoc2013-epiphany-7a31887b89005519fcb012cce53adc2a6402d066.zip
Unref EphyShell on EphyWindow's dispose method
This way we can break ref cycles that can happen when using Seed extensions. Bug #573551
-rw-r--r--src/ephy-window.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/ephy-window.c b/src/ephy-window.c
index 61cc17c8c..3f53fa39d 100644
--- a/src/ephy-window.c
+++ b/src/ephy-window.c
@@ -458,6 +458,7 @@ struct _EphyWindowPrivate
guint is_popup : 1;
guint present_on_insert : 1;
guint key_theme_is_emacs : 1;
+ guint shell_unref : 1;
};
enum
@@ -3314,6 +3315,15 @@ ephy_window_dispose (GObject *object)
destroy_fullscreen_popup (window);
G_OBJECT_CLASS (ephy_window_parent_class)->dispose (object);
+
+ /* We need to unref the shell after chaining up to the parent
+ * class, since our children widgets might need the shell to
+ * be around for some cleanup operations */
+ if (window->priv->shell_unref == FALSE)
+ {
+ g_object_unref (ephy_shell);
+ window->priv->shell_unref = TRUE;
+ }
}
static void
@@ -3834,8 +3844,6 @@ ephy_window_finalize (GObject *object)
G_OBJECT_CLASS (ephy_window_parent_class)->finalize (object);
LOG ("EphyWindow finalised %p", object);
-
- g_object_unref (ephy_shell);
}
/**