Re: [Evolution-hackers] how to debug evolution-wombat freeze



Hi Ettore,

On Tue, 2003-09-30 at 19:27, Ettore Perazzoli wrote:
> > 	Checkout HEAD ORBit2 - it should have the fix in it.
> 
> Hmm...  Still not fixed, it seems.  Trace attached.

	Urgh; so - I looked at the trace again; we have a nasty pobj reference
counting over-enthusiasm somewhere.

	This effect could be caused by client code _releasing a CORBA_Object it
doesn't own (incidentally); the strangest thing is that tracing the
code-path:

	ORBit_small_invoke_stub assumes that the CORBA_Object passed to it is
owned by it for it's lifetime (a fair assumption - went_offline ensures
that this is so); this means that obj->adaptor_obj must also be valid
for it's lifetime (we hold a ref) thus I'm highly confused that
POAObject_handle_request can get itself to a state where poa has (it
seems) been finalized - it just doesn't seem possible to me.

	On the other hand - re-builds of ORBit2 are very problematic; it
includes .h files in _SOURCES lines and this screws with many versions
of automake to ensure that stuff isn't re-built correctly. Is it
possible that a re-build of ORBit2 from clean might fix this ?

	Failing that; I attach a patch that should have no effect at all [
holds another ref outside that ], does it change the situation ?

	Thanks,

		Michael.

-- 
 michael ximian com  <><, Pseudo Engineer, itinerant idiot
Index: src/orb/orb-core/orbit-small.c
===================================================================
RCS file: /cvs/gnome/ORBit2/src/orb/orb-core/orbit-small.c,v
retrieving revision 1.91
diff -u -p -u -r1.91 orbit-small.c
--- src/orb/orb-core/orbit-small.c	7 Jul 2003 17:06:16 -0000	1.91
+++ src/orb/orb-core/orbit-small.c	1 Oct 2003 10:58:43 -0000
@@ -594,6 +594,7 @@ ORBit_small_invoke_stub (CORBA_Object   
 		goto clean_out;
 	}
 
+	ORBit_RootObject_duplicate (obj);
 	adaptor_obj = obj->adaptor_obj;
 
 	if (adaptor_obj) {
@@ -601,8 +602,10 @@ ORBit_small_invoke_stub (CORBA_Object   
 		if (ORBit_poa_allow_cross_thread_call ((ORBit_POAObject) adaptor_obj)) {
 			tprintf_header (obj, m_data);
 			tprintf ("[in-proc]");
+			ORBit_RootObject_duplicate (adaptor_obj);
 			ORBit_small_handle_request (adaptor_obj, m_data->name, ret,
 						    args, ctx, NULL, ev);
+			ORBit_RootObject_release (adaptor_obj);
 			goto clean_out;
 		} else {
 			tprintf ("[in-proc-XT]");
@@ -667,6 +670,7 @@ ORBit_small_invoke_stub (CORBA_Object   
 	};
 
  clean_out:
+	ORBit_RootObject_release (obj);
 	ORBit_RootObject_release (xt_proxy);
 	giop_recv_buffer_unuse (recv_buffer);
 


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