[g-a-devel]Re: a more substantial bug report ...



Hi Bill,

On Wed, 2002-03-13 at 22:42, Bill Haneman wrote:
> I committed a few fixes for nasty bugs.  However I don't seem to have
> solved the root cause of this problem.

	Ok - I had another look, and getting a bit bleary eyed. I think the
problem is here:

SpiAccessible *
spi_accessible_construct (GType type, AtkObject *o)
{
    SpiAccessible *retval;
    CORBA_Environment ev;

    CORBA_exception_init (&ev);

    g_assert (o);
    g_assert (g_type_is_a (type, SPI_ACCESSIBLE_TYPE));

    if ((retval = g_hash_table_lookup (get_public_refs (), o)))
      {
        bonobo_object_ref (BONOBO_OBJECT (retval));
	return retval;
      }
    else

	The first path is called - since we're getting a new SpiAccessible for
the AtkObject - this is a problem since we're assuming that the returned
type will be of 'type' but in fact we're asking for it to be a different
[libgail-gnome] type now instead.

	Thus (I imagine) we trample over memory, and get a corrupted answer of
some sort. This might explain why we get the problem going up but not
going down the tree - inasmuch that we go back up, and re-touch already
instantiated AtkObjects that we then try to change the size of.

	How does that sound as an explanation ? Problem is, it's not obvious
how to fix, since we rely on this hash table to provide pointer & CORBA
reference identity for identical objects.

	So - it would seem that we need to be able to instantiate these
'strange' Accessibles right the first time, instead of coming back and
re-touching them. Removing the path above results in no crash, but an
infinite recursion, and CORBA reference comparison problems ;-)

	Hope that helps track it,

	Regards,

		Michael.

	

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




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