GNOME Bugzilla – Bug 318996
Yelp crashes when clicking on a manual, click back, and clicking on the manual again
Last modified: 2009-09-22 01:48:06 UTC
1. Click on the Accessibility Guide 2. Click the back button in the toolbar before yelp finishes loading the document 3. Click on the Accessibility Guide again Here is the stack trace: Backtrace was generated from '/opt/gnome2/bin/yelp' Using host libthread_db library "/lib/tls/libthread_db.so.1". `system-supplied DSO at 0xffffe000' has disappeared; keeping its symbols. [Thread debugging using libthread_db enabled] [New Thread -1226582336 (LWP 7097)] [New Thread -1294005328 (LWP 7109)] [New Thread -1285612624 (LWP 7108)] [New Thread -1277219920 (LWP 7107)] [New Thread -1268827216 (LWP 7106)] [New Thread -1259992144 (LWP 7102)] [New Thread -1234715728 (LWP 7101)] 0xffffe410 in __kernel_vsyscall ()
+ Trace 63559
Thread 1 (Thread -1226582336 (LWP 7097))
This is reproducible, so marking NEW.
*** Bug 307417 has been marked as a duplicate of this bug. ***
Similar back trace at https://launchpad.net/products/yelp/+bug/35892
Also reproduced on Gentoo: http://bugs.gentoo.org/show_bug.cgi?id=136761
Gonna fix this soon. putting this here for my own reference. smitten@home:~$ YELP_DEBUG="all" YELP_DEBUG_FILTER="yelp-window:yelp-xslt-pager" /opt/gnome2/bin/yelp & [1] 13680 smitten@home:~$ yelp-window.c:911: yelp_window_load: entering yelp-window.c:912: uri = "x-yelp-toc:" yelp-window.c:1000: window_do_load: entering yelp-window.c:1956: pager_start_cb: entering yelp-window.c:1957: page_id="index" yelp-window.c:1985: pager_page_cb: entering yelp-window.c:1986: page_id="index" yelp-window.c:1773: window_handle_page: entering yelp-window.c:1774: page->page_id = "index" yelp-window.c:1775: page->title = "Help Topics" yelp-window.c:1776: page->contents = 2500 bytes yelp-window.c:1854: uri = file:///opt/gnome2/share/yelp/toc.xml yelp-window.c:3165: idle_write: entering yelp-window.c:3171: context->buffer = 2500 bytes yelp-window.c:3172: context->cur = 0 yelp-window.c:3173: context->length = 2500 yelp-window.c:2064: html_uri_selected_cb: entering yelp-window.c:2065: uri = "x-yelp-toc:Desktop" yelp-window.c:911: yelp_window_load: entering yelp-window.c:912: uri = "x-yelp-toc:Desktop" yelp-window.c:1000: window_do_load: entering yelp-window.c:1956: pager_start_cb: entering yelp-window.c:1957: page_id="Desktop" yelp-window.c:1773: window_handle_page: entering yelp-window.c:1774: page->page_id = "Desktop" yelp-window.c:1775: page->title = "Desktop" yelp-window.c:1776: page->contents = 4071 bytes yelp-window.c:1854: uri = file:///opt/gnome2/share/yelp/toc.xml#Desktop yelp-window.c:3165: idle_write: entering yelp-window.c:3171: context->buffer = 4071 bytes yelp-window.c:3172: context->cur = 0 yelp-window.c:3173: context->length = 4071 yelp-window.c:2064: html_uri_selected_cb: entering yelp-window.c:2065: uri = "file:///opt/gnome2/share/gnome/help/user-guide/C/user-guide.xml" yelp-window.c:911: yelp_window_load: entering yelp-window.c:912: uri = "file:///opt/gnome2/share/gnome/help/user-guide/C/user-guide.xml" yelp-window.c:1000: window_do_load: entering yelp-xslt-pager.c:164: xslt_pager_process: entering PROFILE [11:26:00]: entering xslt_pager_process yelp-window.c:1956: pager_start_cb: entering yelp-window.c:1957: page_id="index" yelp-window.c:1000: window_do_load: entering (yelp:13680): GLib-GObject-WARNING **: gsignal.c:1739: instance `0x818f000' has no handler with id `431' (yelp:13680): GLib-GObject-WARNING **: gsignal.c:1739: instance `0x818f000' has no handler with id `437' (yelp:13680): GLib-GObject-WARNING **: gsignal.c:1739: instance `0x818f000' has no handler with id `438' (yelp:13680): GLib-GObject-WARNING **: gsignal.c:1739: instance `0x818f000' has no handler with id `439' (yelp:13680): GLib-GObject-WARNING **: gsignal.c:1739: instance `0x818f000' has no handler with id `440' yelp-window.c:1956: pager_start_cb: entering yelp-window.c:1957: page_id="Desktop" yelp-window.c:1773: window_handle_page: entering yelp-window.c:1774: page->page_id = "Desktop" yelp-window.c:1775: page->title = "Desktop" yelp-window.c:1776: page->contents = 4071 bytes yelp-window.c:1854: uri = file:///opt/gnome2/share/yelp/toc.xml#Desktop yelp-window.c:3165: idle_write: entering yelp-window.c:3171: context->buffer = 4071 bytes yelp-window.c:3172: context->cur = 0 yelp-window.c:3173: context->length = 4071 yelp-xslt-pager.c:357: xslt_yelp_document: entering yelp-xslt-pager.c:370: xslt_yelp_document: page_id = "index"
This can also be re-created doing : - Launch yelp - Click on "Desktop User Guide" on right pane. - As it attempts to load the left menu is briefly displayed in the right pane (not sure this is right), really visible on slower systems. - While the menu is being displayed click on one of the items, e.g. Accessibility - Sometimes yelp will crash, with the same stack trace e.g. strcmp() in yelp_pager_page_contains_frag(). - Other times a warning dialog is displayed containing : The section "ApplicatoinsAccessibility" does not exist in this document. If you were directed to this section from a Help button in an application, please report this ot the maintainers of that application. - Either of the above will only happen once, subsequent repeats will load the relevant section that is clicked on. This would seem to be a initialisation issue, frag_page_id in the function yelp_pager_page_contains_frag() is being set to NULL returned from : YELP_PAGER_GET_CLASS (pager)->resolve_frag (pager, frag_id); The fact that this only appears to happen the first time throgh the above sequence of events, would mean something has not been assigned/set before this is done. So returning NULL for the frag_id I would guess is probably perfectly valid, so in my opinion a simple check for NULL would suffice. Attached a simple patch.
Created attachment 72977 [details] [review] Simple frag_id NULL test
*** Bug 358489 has been marked as a duplicate of this bug. ***
*** Bug 363277 has been marked as a duplicate of this bug. ***
Ping to see what status of this is at ;)
I cannot reproduce it anymore. My current Yelp is 2.16.1
Just tried recreating this with yelp 2.16.2, and the bug still happens for me. You really have to be quite quick with your clicking and it is more visible on older systems, the attached patch once applied does avert the crash. e.g. - Launch Yelp - Select "Panel Applets" from left pane - From right Pane select "Clock Manual" Before the clock manual is actually displayed the contents of the left pane gets displayed in the right pane e.g. Desktop Panel Applets System Tools Other Documentation Manual Pages - This may be only visible on older/slower systems. if you quickly select one of these items, one some occasions yelp will crash, other occasions an error dialog as mentioned before is shown. I am testing this in Solaris. The patch, pretty simple in my view does solve the crash.
This is fixed with the new pager system in 2.19.1 (what isn't?). Marking as Fixed and the the patch as Obsolete.