Skip to content

opening parallel tab a second time crashes #1371

Description

@karlkleinpaste

Reproducible every time: Start Xiphos, open parallel tab, close it, open it again, crash.

(xiphos:2242593): GLib-GObject-CRITICAL **: 08:55:15.399: invalid unclassed pointer in cast to 'GtkWidget'
(xiphos:2242593): Gtk-CRITICAL **: 08:55:15.399: gtk_widget_get_realized: assertion 'GTK_IS_WIDGET (widget)' failed
Thread 1 "xiphos" received signal SIGSEGV, Segmentation fault.
0x00007ffff1d35228 in g_type_check_instance_cast () from /lib64/libgobject-2.0.so.0
(gdb) bt 10
#0  0x00007ffff1d35228 in g_type_check_instance_cast () at /lib64/libgobject-2.0.so.0
#1  0x000000000048fe11 in main_update_parallel_page_detached () at /home/karl/src/bible/xiphos/src/main/parallel_view.cc:952
#2  0x000000000043a774 in on_entry_activate (entry=0xb096810, user_data=0x0) at /home/karl/src/bible/xiphos/src/gtk/navbar_versekey_parallel.c:328
#3  0x00007ffff1d0da2c in g_closure_invoke () at /lib64/libgobject-2.0.so.0
#4  0x00007ffff1d2baba in signal_emit_unlocked_R.isra.0 () at /lib64/libgobject-2.0.so.0
#5  0x00007ffff1d2daf6 in signal_emit_valist_unlocked () at /lib64/libgobject-2.0.so.0
#6  0x00007ffff1d2dd68 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0
#7  0x00007ffff1d2de23 in g_signal_emit () at /lib64/libgobject-2.0.so.0
#8  0x00007ffff18ebe4c in gtk_widget_activate () at /lib64/libgtk-3.so.0
#9  0x00000000004a9cd9 in show_parallel (svalue=0xe872b70 "1Cor 8:7", stype=0x59f3660 "verse", clicked=1) at /home/karl/src/bible/xiphos/src/main/url.cc:271
(More stack frames follow...)
(gdb) up
#1  0x000000000048fe11 in main_update_parallel_page_detached () at /home/karl/src/bible/xiphos/src/main/parallel_view.cc:952
952		    !gtk_widget_get_realized(GTK_WIDGET(widgets.html_parallel_dialog)))
(gdb) l
947		SWBuf text("");
948		gchar buf[5000];
949		gint modidx, parallel_count, fraction;
950	
951		if (!widgets.html_parallel_dialog ||
952		    !gtk_widget_get_realized(GTK_WIDGET(widgets.html_parallel_dialog)))
953			return;
954	
955		/* how big a pile of parallels have we got? */
956		if (settings.parallel_list == NULL)
(gdb) p widgets
$1 = {app = 0x5f5830, appbar = 0x5ec430, vboxMain = 0xc6fbe0, page = 0xc39010, epaned = 0x235d9f0, paned_sidebar = 0x58f2520, box_side_preview = 0x58f2c60, vpaned = 0x25e71e0, vpaned2 = 0x3253670, 
  hpaned = 0x2da3b50, bible_info_paned = 0x0, shortcutbar = 0x58f2520, bookmark_tree = 0x5917720, ctree_widget_books = 0x0, workbook_lower = 0x0, notebook_gbs = 0x0, notebook_dict = 0x0, 
  all_strongs = 0x23602f0, box_comm = 0x303d5c0, notebook_bible_parallel = 0x27837b0, notebook_text = 0x28b18b0, notebook_percomm = 0x0, notebook_sidebar = 0x58fb890, notebook_comm_book = 0x243dd70, 
  notebook_main = 0x243f430, notebook_dict_devot = 0x2951530, vbox_text = 0x3132640, box_dict = 0x276a880, vbox_previewer = 0x2c1cb90, parallel_tab = 0xe88b110, dock_sb = 0x0, frame_parallel = 0x0, 
  studypad_dialog = 0x0, entry_dict = 0x27637d0, toolbar_comments = 0x0, toolbar_studypad = 0x0, eventbox1 = 0x0, html_search_report = 0x0, html_parallel = 0xac6a860, 
  html_parallel_dialog = 0x4ba3690, html_text = 0x31317d0, html_comm = 0x2dde300, html_percomm = 0x0, html_dict = 0x2aad340, html_devotional = 0x4a68c70, html_book = 0x273dd30, html_studypad = 0x0, 
  html_previewer = 0x0, html_previewer_text = 0x29a0bc0, cb_books = 0x0, listview_dict = 0x0, store = 0x0, label_comm = 0x0, label_dict = 0x0, comboboxentry_dict = 0x0, entry_devotional = 0x2364fa0, 
  button_devotional_date = 0x30e7ce0, popover_devotional = 0x2f30cc0, calendar_devotional = 0x2f4e230, add_bookmark_submenu = 0x0, viewtexts_item = 0x2e6a470, viewpreview_item = 0x3169ed0, 
  parallel_tab_item = 0x3225690, side_preview_item = 0x3226460, viewcomms_item = 0x318ee40, viewdicts_item = 0x339f5c0, linkedtabs_item = 0x2622140, showversenum_item = 0x2623a90, 
  readaloud_item = 0x2622da0, versehighlight_item = 0x29aba20, annotate_highlight_item = 0x29aca10, xrefs_in_verse_list_item = 0x0, new_journal_item = 0x33287b0, button_dict_book = 0x0, 
  button_new_tab = 0x3203a50, button_dict_back = 0x2d2c3b0, button_dict_forward = 0x2409730, hboxtb = 0x3030b40}
(gdb) p widgets.html_parallel
$2 = 0xac6a860
(gdb) p widgets.html_parallel_dialog
$3 = 0x4ba3690
(gdb) p *(widgets.html_parallel)
$4 = {parent_instance = {g_type_instance = {g_class = Python Exception <class 'gdb.error'>: No type named TypeNode.
}, ref_count = 1, qdata = 0xac74a70}, priv = 0xac6a770}
(gdb) p *(widgets.html_parallel_dialog)
$5 = {parent_instance = {g_type_instance = {g_class = <error reading variable: Cannot access memory at address 0x140>}, ref_count = 32, qdata = 0x4ba7d13}, priv = 0x333a30322073}

Why does it test html_parallel_dialog when html_parallel should be what's under consideration for parallel tab? It's not opening the separate "dialog" window, it's opening the tab. No wonder that what's in the "dialog" structure isn't reliable.

Well...

git blame says I wrote those few lines of code (951-953) in 2012. But I never personally use the parallel tab, I use only the detached parallel dialog, so I've never noticed the problem. Question is, Why/how does opening the parallel tab lead to trying to update the parallel dialog? Maybe more importantly, why is this happening just now, with no user reports? Have recent updates induced the problem?

Something has (recently?) chosen to take the route through the dialog code when it should not even think to do so.

The parallel dialog can be opened and re-opened repetitiously without incident.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions