Nagappan,
 
Thank you for your most helpful response.  This explains a lot of things
to us.  Is getwindowlist() part of LDTP?
 
Does at-spi-registryd have a log file so we could figure out what the
problem is?
 
Pretend for a second that the phrase "we just restart the X [server]" is
not something I am familiar with doing.  Could you detail the steps
involved?
 
Thanks again.
 
-Sam

________________________________

From: Nagappan A [mailto:nagap...@gmail.com] 
Sent: Monday, January 19, 2009 3:06 PM
To: Quiring, Sam
Cc: gnome-accessibility-devel@gnome.org
Subject: Re: [g-a-devel] Segfault in Accessible_getChildAtIndex


Hello Quiring,

I have noticed this happening in both Ubuntu and RHEL environment when
we test them in VMware Workstation product. What I noticed is, there is
a delay in starting at-spi-registryd.

So wrote a small utility to check whether everything is set correct or
not and then we start our test.

getwindowlist ()

If any LdtpExecutionError exception is thrown, that means there is an
issue starting at-spi-registryd, then in our environment we just restart
the X and most of the time it fixed the issue. You may need to
re-iterate a logic something like this, to work around the issue.

Thanks
Nagappan


2009/1/19 Quiring, Sam <sam.quir...@windriver.com>


        Greetings, 
         
        One of the guys on my team is getting a segfault in
Accessible_getChildAtIndex.  We've have been trying to track this down
for days and are at wit's end.  This is our environment:
         
        Ubuntu 8.04
        Gnome 2.22.3
        at-spi 1.22.1
         
        Both he and I run Ubuntu on VMWare Workstation.  We are both
running identical Ubuntu images on VMware.  Tthe error does not happen
for me, he is getting it all the time.  The main difference between our
two laptops:  his is significantly slower than mine.
         
        We have a standalone application that displays all the apps,
(i.e, direct children of desktop), on the machine.  Here is the loop to
retrieve them:
         
        1    Accessible *desktop = SPI_getDesktop(0);
        2    int dtChildCount = Accessible_getChildCount(desktop);
        3    int child;
        4    for(child = 0; child < dtChildCount; child++) {
        5        Accessible *desktopChild =
Accessible_getChildAtIndex(desktop, child);
        6        if(desktopChild == 0) {
        7            myLog("getChild returned 0");
        8            continue;
        9        }
        10       ...  -- display info about each app
        11   }
        
        This loop in the standalone application works for both of us,
although two of the apps get SPI Exceptions.  For app 18 (child == 17)
we get an SPI_Exception (*) and the Accessible_getChildAtIndex returns 0
(the call on line 6, above).  Here is the output:
         
        app 1/21 (n:x-session-manager,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 2/21 (n:gnome-settings-daemon,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 3/21 (n:gnome-screensaver,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 4/21 (n:gnome-panel,d:,r:application)  [actions: ] [subs:
Application ] (children: 2)
        app 5/21 (n:nautilus,d:,r:application)  [actions: ] [subs:
Application ] (children: 1)
        app 6/21 (n:metacity,d:,r:application)  [actions: ] [subs:
Application ] (children: 0)
        app 7/21 (n:bluetooth-applet,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 8/21 (n:update-notifier,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 9/21 (n:gnome-volume-manager,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 10/21 (n:gnome-power-manager,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 11/21 (n:evolution-alarm-notify,d:,r:application)  [actions:
] [subs: Application ] (children: 0)
        app 12/21 (n:tracker-applet,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 13/21 (n:applet.py,d:,r:application)  [actions: ] [subs:
Application ] (children: 0)
        app 14/21 (n:gnome-terminal,d:,r:application)  [actions: ]
[subs: Application ] (children: 3)
        app 15/21 (n:vmware-user,d:,r:application)  [actions: ] [subs:
Application ] (children: 0)
        ---- spiException on app 15/21 retrieving the attributes:
Accessible_getAttributes()
        app 16/21 (n:notification-daemon,d:,r:application)  [actions: ]
[subs: Application ] (children: 0)
        app 17/21 (n:nm-applet,d:,r:application)  [actions: ] [subs:
Application ] (children: 0)
        ---- NULL app 18: spiException 
        app 19/21 (n:Firefox,d:,r:application)  [actions: ] [subs:
Application ] (children: 1)
        app 19/21   - [states: enabled, sensitive, showing, visible]
        app 20/21 (n:evince,d:,r:application)  [actions: ] [subs:
Application ] (children: 2)
        app 21/21 (n:sbq,d:,r:application)  [actions: ] [subs:
Application ] (children: 0)
         
        (*) Both exceptions display as:
         
        TCF 57:30.032: AT-SPI Exception:
IDL:omg.org/CORBA/COMM_FAILURE:1.0
        TCF 57:30.032:        - Code: unknown type or doesn't fit the
other types
        TCF 57:30.032:        - Type: Do not know or cannot tell where
the problem is
        
        In our primary application, which is multithreaded, we go
through a loop identical in structure to the one above.  This time, when
we get to Gnome desktop app 18 our application gets a SIGSEGV directly.
The SPI_ExceptionHandler we pushed does not get called.  We've put in a
SIGSEV handler and a stack walker to figure out what is going on and we
get this stack dump:
         
         /usr/lib/libcspi.so.0 [0xb78da969]  called by
         /usr/lib/libcspi.so.0 [0xb78d6be2]  called by
         /usr/lib/libcspi.so.0(Accessible_getChildAtIndex+0x52)
[0xb78d4372]  called by     <== Accessible_getChildAtIndex()!
         ./stp-atspi(getFramesUnderMouse+0x6d) [0x8063a65]  called by
         ./stp-atspi(stackingOrderUnderMouse+0x9a) [0x8063c1e]  called
by
        ...
         
        Any suggestions for working around this would be greatly
appreciated.  Here is some information we've learned:
         
        If the VMWare image is rebooted and we comment out all calls to
Accessible_getAtttributes(), then we do not get the segfault (SIGSEGV).
However, if we leave the calls in to Accessible_getAttributes() then we
will start getting the SIGSEGV as describe above.  Our theory is that
there is a bug in the Accessible_getAttributes implementation that gets
a segfault and leaves some AT-SPI data structure in a bad state.  That
bad data structure causes the AT-SPI implementation to get a suprise
SIGSEGV from then on every time we try to access application 18.
         
        -Sam
         
        PS:  Again, this error does not happen in my VMWare instance,
only on my teammate's slower laptop.  But one important fact is that the
two of us are running identical Ubuntu images.

        _______________________________________________
        Gnome-accessibility-devel mailing list
        Gnome-accessibility-devel@gnome.org
        http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel
        
        




-- 
Linux Desktop (GUI Application) Testing Project -
http://ldtp.freedesktop.org
http://nagappanal.blogspot.com

_______________________________________________
Gnome-accessibility-devel mailing list
Gnome-accessibility-devel@gnome.org
http://mail.gnome.org/mailman/listinfo/gnome-accessibility-devel

Reply via email to