Re: oaf activation bug fix ...



On 15Nov2001 05:56PM (-0500), Michael Meeks wrote:
> 
> 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.
> 

See the bug report for my comments. BTW for oaf/bonobo-activation we
generally do not close the bug until this fix is actually in the tree.

Thanks for the fix!

 - Maciej



> 	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]