oaf activation bug fix ...



Hi there,

	This fixes Dan's reported bug:  #64642, may I commit ?

	It would be great if you could review my bonobo-activation leak 
fix at the same time; since I have another patch queued here adding some 
more regression tests that I'm holding off on until you do.

	Thanks,

		Michael.

Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/oaf/ChangeLog,v
retrieving revision 1.190
diff -u -p -u -r1.190 ChangeLog
--- ChangeLog	2001/11/09 08:47:54	1.190
+++ ChangeLog	2001/11/15 22:52:49
@@ -1,3 +1,8 @@
+2001-11-16  Michael Meeks  <michael ximian com>
+
+	* oafd/od-corba.c (impl_OAF_ObjectDirectory_activate):
+	fix for mutliple activations causing grief issues ...
+
 2001-11-09  Wang Jian  <lark linux net cn>
 
 	* configure.in(ALL_LINGUAS): Added zh_CN.
Index: oafd/od-corba.c
===================================================================
RCS file: /cvs/gnome/oaf/oafd/od-corba.c,v
retrieving revision 1.33
diff -u -p -u -r1.33 od-corba.c
--- oafd/od-corba.c	2001/09/04 03:46:53	1.33
+++ oafd/od-corba.c	2001/11/15 22:52:50
@@ -430,6 +430,7 @@ impl_OAF_ObjectDirectory_activate (impl_
 	ODActivationInfo ai;
         OAF_GeneralError *errval;
         char *error_description;
+        CORBA_Environment retry_ev;
 
 	retval = CORBA_OBJECT_NIL;
 
@@ -455,6 +456,31 @@ impl_OAF_ObjectDirectory_activate (impl_
 
 	if (si != NULL) {
 		retval = od_server_activate (si, &ai, servant->self, ev);
+                /* If we failed to activate - it may be because our
+                 * request re-entered _during_ the activation
+                 * process resulting in a second process being started
+                 * but failing to register - so we'll look up again here
+                 * to see if we can get it.
+                 * FIXME: we should not be forking redundant processes
+                 * while an activation of that same process is on the
+                 * stack.
+                 * FIXME: we only get away with this hack because we
+                 * try and fork another process & thus allow the reply
+                 * from the initial process to be handled in the event
+                 * loop.
+                 */
+
+                if (ev->_major != CORBA_NO_EXCEPTION) {
+                        CORBA_exception_init (&retry_ev);
+
+                        retval = od_get_active_server (servant, iid, ctx, &retry_ev);
+
+                        CORBA_exception_free (&retry_ev);
+
+                        if (retval != CORBA_OBJECT_NIL) {
+                                CORBA_exception_free (ev);
+                        }
+                }
         } else {
                 errval = OAF_GeneralError__alloc ();
 

-- 
 mmeeks gnu org  <><, Pseudo Engineer, itinerant idiot




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