I filed this in GNOME's bugzilla, but they wanted me to file it here as well since it looks like a problem in WebCore. Attaching a backtrace from gdb when Evolution hangs. It happens at random points when scrolling through the message list and reading messages. Mostly on messages of some size that take some time to render.
Created attachment 207534 [details] Log from gdb
Hrm. I see a few garbage collection threads. I'm not sure if that's an issue or not. The other thing I see is a thread blocked in WebCore::IconDatabase::syncThreadMainLoop. Does evolution use the icon database?
Trying to get an answer for you from the evolution developers.
(In reply to comment #2) > Does evolution use the icon database? There are no webkit_icon_database_* calls in Evolution.
Got this again today with the following backtrace: #0 0x0000003dd4c181b9 in isAnonymousBlock (this=0x7fbf9874e7f0) at Source/WebCore/rendering/RenderObject.h:510 #1 WebCore::AccessibilityObject::accessibilityPlatformIncludesObject ( this=this@entry=0x7fbfc0d495a0) at Source/WebCore/accessibility/atk/AccessibilityObjectAtk.cpp:96 #2 0x0000003dd3c6ee70 in WebCore::AccessibilityRenderObject::accessibilityIsIgnoredBase (this=this@entry=0x7fbfc0d495a0) at Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1116 #3 0x0000003dd3c76902 in WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored (this=0x7fbfc0d495a0) at Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1134 #4 0x0000003dd3c7d5c4 in WebCore::AXObjectCache::notificationPostTimerFired ( this=0x7fbfc0d01900) at Source/WebCore/accessibility/AXObjectCache.cpp:647 #5 0x0000003dd4aeb319 in WebCore::ThreadTimers::sharedTimerFiredInternal ( this=0x7fc03827bf30) at Source/WebCore/platform/ThreadTimers.cpp:129 #6 0x0000003dd4c5b322 in WebCore::timeout_cb () at Source/WebCore/platform/gtk/SharedTimerGtk.cpp:49 #7 0x0000003e10e48963 in g_timeout_dispatch (source=source@entry=0x409ecb0, callback=<optimized out>, user_data=<optimized out>) at gmain.c:4413 #8 0x0000003e10e47e06 in g_main_dispatch (context=0x1df1d90) at gmain.c:3054 #9 g_main_context_dispatch (context=context@entry=0x1df1d90) at gmain.c:3630 #10 0x0000003e10e48158 in g_main_context_iterate (context=0x1df1d90, block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) ---Type <return> to continue, or q <return> to quit--- at gmain.c:3701 #11 0x0000003e10e4855a in g_main_loop_run (loop=0x2f3f620) at gmain.c:3895 #12 0x0000003dd218a53d in gtk_main () at gtkmain.c:1156 #13 0x00000000004038b9 in main (argc=1, argv=0x7fff8198db88) at main.c:707
Evolution was trying to render a large message.
Mario is the a11y expert
Which is the specific version of WebKitGTK+ you are using? Also, a link to the bug in GNOME's bugzilla might be helpful too. The code in WebCore's a11y layer has slightly changed lately and it's for me hard to figure out what might be going wrong here without more context. For instance, the AccessibilityRenderObject::accessibilityIsIgnoredBase that you have in the last backtrace is no longer there anymore... Thanks in advance for taking your time to report this
webkitgtk-2.0.4-3.fc20.x86_64 I didn't file it in GNOME bugzilla because they pointed me here instead.
I got another similar one today while rendering a .po file: (gdb) bt full #0 0x00000034d6532329 in isAnonymousBlock (this=0x7f2b06c12aa8) at Source/WebCore/rendering/RenderObject.h:528 No locals. #1 WebCore::AccessibilityObject::accessibilityPlatformIncludesObject (this= 0x7f2b07305d68) at Source/WebCore/accessibility/atk/AccessibilityObjectAtk.cpp:96 r = 0x7f2b06c12aa8 parent = 0x7f2b06d39840 role = <optimized out> #2 0x00000034d5737c76 in WebCore::AccessibilityRenderObject::computeAccessibilityIsIgnored (this=0x7f2b07305d68) at Source/WebCore/accessibility/AccessibilityRenderObject.cpp:1122 decision = <optimized out> #3 0x00000034d573e76a in WebCore::AXObjectCache::notificationPostTimerFired ( this=0x7f2b92fa9f00) at Source/WebCore/accessibility/AXObjectCache.cpp:660 notification = <optimized out> protectorForCacheOwner = {m_ptr = 0x7f2b06f0e400} i = 27778 count = 267854 #4 0x00000034d56f7ad9 in WebCore::ThreadTimers::sharedTimerFiredInternal ( this=0x7f2ba1286be0) at Source/WebCore/platform/ThreadTimers.cpp:129 timer = 0x7f2b92fa9fa0 fireTime = 41359.387635999999 ---Type <return> to continue, or q <return> to quit--- timeToQuit = 41359.437636000002 #5 0x00000034d570c6b2 in WebCore::timeout_cb () at Source/WebCore/platform/gtk/SharedTimerGtk.cpp:49 No locals. #6 0x00000033fd049e03 in g_timeout_dispatch (source=source@entry=0x830b5d0, callback=<optimized out>, user_data=<optimized out>) at gmain.c:4450 timeout_source = 0x830b5d0 again = <optimized out> #7 0x00000033fd049266 in g_main_dispatch (context=0xdcf510) at gmain.c:3065 dispatch = 0x33fd049df0 <g_timeout_dispatch> was_in_call = 0 user_data = 0x0 callback = 0x34d570c6a0 <WebCore::timeout_cb(gpointer)> cb_funcs = 0x33fd32a8e0 <g_source_callback_funcs> cb_data = 0x7f25760 need_destroy = <optimized out> current_source_link = {data = 0x830b5d0, next = 0x0} source = 0x830b5d0 current = 0xdee420 i = 1 #8 g_main_context_dispatch (context=context@entry=0xdcf510) at gmain.c:3641 No locals. #9 0x00000033fd0495e8 in g_main_context_iterate (context=0xdcf510, ---Type <return> to continue, or q <return> to quit--- block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at gmain.c:3712 max_priority = 120 timeout = 0 some_ready = 1 nfds = <optimized out> allocated_nfds = 4 fds = 0x3bfedf0 #10 0x00000033fd0499fa in g_main_loop_run (loop=0x371a400) at gmain.c:3906 __PRETTY_FUNCTION__ = "g_main_loop_run" #11 0x00000034d13a9e85 in gtk_main () at gtkmain.c:1158 loop = 0x371a400 #12 0x000000000040377f in main (argc=1, argv=0x7fff184aa6f8) at main.c:683 shell = 0xf54140 settings = <optimized out> error = 0x0 (gdb)
webkitgtk-2.2.1-1.fc20.x86_64 on FC 20 Alpha. Upgrading to 2.2.2 now so I'll keep an eye on this after that.
Evolution still hangs when rendering large messages. Now there are no traces of Accessibility calls in the backtrace: #0 WebCore::Style::nextSiblingRenderer(WebCore::Text const&) #1 WebCore::Style::createTextRendererIfNeeded(WebCore::Text&) #2 WebCore::Style::attachChildren(WebCore::ContainerNode&) #3 WebCore::Style::attachRenderTree(WebCore::Element&, WTF::PassRefPtr<WebCore::RenderStyle>) #4 WebCore::Style::attachChildren(WebCore::ContainerNode&) #5 WebCore::Style::attachRenderTree(WebCore::Element&, WTF::PassRefPtr<WebCore::RenderStyle>) #6 WebCore::Style::attachChildren(WebCore::ContainerNode&) #7 WebCore::Style::attachRenderTree(WebCore::Element&, WTF::PassRefPtr<WebCore::RenderStyle>) #8 WebCore::Style::resolveTree(WebCore::Element&, WebCore::Style::Change) #9 WebCore::Style::resolveTree(WebCore::Document&, WebCore::Style::Change) #10 WebCore::Document::recalcStyle(WebCore::Style::Change) #11 WebCore::Document::updateStyleIfNeeded() #12 WebCore::Document::finishedParsing() #13 WebCore::HTMLDocumentParser::prepareToStopParsing() #14 WebCore::HTMLDocumentParser::finish() #15 WebCore::DocumentWriter::end() #16 WebCore::DocumentLoader::finishedLoading(double) #17 WebCore::CachedResource::checkNotify() #18 WebCore::CachedRawResource::finishLoading(WebCore::ResourceBuffer*) #19 WebCore::SubresourceLoader::didFinishLoading(double) #20 WebCore::readCallback(_GObject*, _GAsyncResult*, void*) #21 async_ready_callback_wrapper at ginputstream.c line 523 #22 g_task_return_now at gtask.c line 1077 #23 complete_in_idle_cb at gtask.c line 1086 #24 g_main_context_dispatch at gmain.c line 3064 #25 g_main_context_dispatch at gmain.c line 3663 #26 g_main_context_iterate at gmain.c line 3734 #27 g_main_loop_run at gmain.c line 3928 #28 gtk_main at gtkmain.c line 1206 #29 main at main.c line 685
This is version 2.4.4 btw.