aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEttore Perazzoli <ettore@src.gnome.org>2001-10-31 06:11:08 +0800
committerEttore Perazzoli <ettore@src.gnome.org>2001-10-31 06:11:08 +0800
commit54ea765e753c91710513e15e3be54ce86077c461 (patch)
treeac3d1b43bf600b0fa507f235f55f14450033ee70
parent02ffaef8e15338007818af8687433527a37517e3 (diff)
downloadgsoc2013-evolution-54ea765e753c91710513e15e3be54ce86077c461.tar.gz
gsoc2013-evolution-54ea765e753c91710513e15e3be54ce86077c461.tar.zst
gsoc2013-evolution-54ea765e753c91710513e15e3be54ce86077c461.zip
Duplicate the owner before pinging it. Fixes #13802.
* evolution-shell-component.c (owner_ping_callback): Duplicate the owner before pinging it. Fixes #13802. svn path=/trunk/; revision=14488
-rw-r--r--shell/ChangeLog5
-rw-r--r--shell/evolution-shell-component.c12
2 files changed, 17 insertions, 0 deletions
diff --git a/shell/ChangeLog b/shell/ChangeLog
index 75d2d825c5..9950766fc5 100644
--- a/shell/ChangeLog
+++ b/shell/ChangeLog
@@ -1,5 +1,10 @@
2001-10-30 Ettore Perazzoli <ettore@ximian.com>
+ * evolution-shell-component.c (owner_ping_callback): Duplicate the
+ owner before pinging it. Fixes #13802.
+
+2001-10-30 Ettore Perazzoli <ettore@ximian.com>
+
* evolution-shell-component.c (impl_owner_unset): New.
(class_init): Install it.
(impl_unsetOwner): Just emit the "owner_unset" signal as the
diff --git a/shell/evolution-shell-component.c b/shell/evolution-shell-component.c
index 37971be54e..a253b9278c 100644
--- a/shell/evolution-shell-component.c
+++ b/shell/evolution-shell-component.c
@@ -180,6 +180,7 @@ owner_ping_callback (void *data)
EvolutionShellComponent *shell_component;
EvolutionShellComponentPrivate *priv;
Bonobo_Unknown owner_objref;
+ CORBA_Environment ev;
gboolean alive;
shell_component = EVOLUTION_SHELL_COMPONENT (data);
@@ -190,7 +191,18 @@ owner_ping_callback (void *data)
if (owner_objref == CORBA_OBJECT_NIL)
return FALSE;
+ /* We are duplicating the object here, as we might get an ::unsetOwner
+ while we invoke the pinging, and this would make the objref invalid
+ and thus crash the stubs (cfr. #13802). */
+
+ CORBA_exception_init (&ev);
+ owner_objref = CORBA_Object_duplicate (owner_objref, &ev);
+
alive = bonobo_unknown_ping (owner_objref);
+
+ CORBA_Object_release (owner_objref, &ev);
+ CORBA_exception_free (&ev);
+
if (alive)
return TRUE;