Re: [g-a-devel] Segfault in Accessible_getChildAtIndex



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:nagappan 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 Quiring 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


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