Re: [Evolution-hackers] how to debug evolution-wombat freeze
- From: Michael Meeks <michael ximian com>
- To: Ettore Perazzoli <ettore ximian com>
- Cc: Larry Ewing <lewing ximian com>, Dax Kelson <Dax GuruLabs com>, Andreas Kotowicz <kotoml mynetix de>, evolution-hackers lists ximian com
- Subject: Re: [Evolution-hackers] how to debug evolution-wombat freeze
- Date: Wed, 01 Oct 2003 11:55:43 +0100
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]