gtk3-demo fails in newcomers guide, pango_font_get_hb_font: assertion 'PANGO_IS_FONT (font)' failed
I've followed the Newcomers Guide and successfully built an element containing gtk3-demo. When I run gtk3-demo, I see the following error:
(gtk3-demo:16): Pango-CRITICAL **: 10:24:41.991: pango_font_get_hb_font: assertion 'PANGO_IS_FONT (font)' failed
Segmentation fault (core dumped)
Steps to reproduce
$ git clone https://gitlab.gnome.org/GNOME/gnome-build-meta.git
$ cd gnome-build-meta
$ git clone https://gitlab.com/BuildStream/bst-external.git
$ cd bst-external; pip install --user -e .; cd -
$ bst build --track-all sdk/gtk+-3.bst
$ bst shell sdk/gtk+-3.bst
> gtk3-demo
(gtk3-demo:16): Pango-CRITICAL **: 10:24:41.991: pango_font_get_hb_font: assertion 'PANGO_IS_FONT (font)' failed
Segmentation fault (core dumped)
Details
$ cat /etc/fedora-release
Fedora release 31 (Thirty One)
$ bst --version
1.4.1
I created a stack with gdb and strace to debug:
$ cat elements/tpreston-debug.bst
kind: stack
runtime-depends:
- freedesktop-sdk.bst:components/gdb.bst
- freedesktop-sdk.bst:components/strace.bst
- sdk/gtk+-3.bst
I think the error comes from the PANGO_IS_FONT check failing, and the segfault is just because pango_font_get_hb_font
returns a NULL and find_hyphen_width tries to use it.
This blog post seems to suggest that we need to create pango modules first, but /usr/bin/pango-querymodules-32
doesn't exist. I'm not sure what to add to the element to fix this. Maybe someone more familiar with pango can help.
GDB backtrace
~/w/celduin/GNOME/gnome-build-meta$ bst shell tpreston-debug.bst
<ton-debug.bst:/]$ gdb gtk3-demo
(gdb) run
Starting program: /usr/bin/gtk3-demo
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff5fa6700 (LWP 9)]
[New Thread 0x7ffff57a5700 (LWP 10)]
[New Thread 0x7ffff4fa4700 (LWP 11)]
(gtk3-demo:5): Pango-CRITICAL **: 10:29:38.424: pango_font_get_hb_font: assertion 'PANGO_IS_FONT (font)' failed
Thread 1 "gtk3-demo" received signal SIGSEGV, Segmentation fault.
hb_font_get_nominal_glyph (font=0x0, unicode=8208, glyph=0x7fffffffc230)
at ../../src/hb-font.cc:791
791 return font->get_nominal_glyph (unicode, glyph);
(gdb) bt
#0 0x00007ffff720c214 in hb_font_get_nominal_glyph(hb_font_t*, hb_codepoint_t, hb_codepoint_t*) (font=0x0, unicode=8208, glyph=0x7fffffffc230) at ../../src/hb-font.cc:791
#1 0x00007ffff72fa82a in find_hyphen_width (item=<optimized out>)
at ../pango/pango-layout.c:3583
#2 0x00007ffff72fa82a in find_break_extra_width
(layout=0x26, pos=38, state=0x7fffffffc3a0) at ../pango/pango-layout.c:3601
#3 0x00007ffff72fa82a in process_item
(layout=layout@entry=0x555555ad1ee0 [PangoLayout], line=line@entry=0x555555aa8230, state=state@entry=0x7fffffffc3a0, force_fit=force_fit@entry=1, no_break_at_end=no_break_at_end@entry=0) at ../pango/pango-layout.c:3752
#4 0x00007ffff72fca7c in process_line
(state=0x7fffffffc3a0, layout=0x555555ad1ee0 [PangoLayout])
at ../pango/pango-layout.c:3986
#5 0x00007ffff72fca7c in pango_layout_check_lines (layout=<optimized out>)
at ../pango/pango-layout.c:4348
#6 0x00007ffff72fca7c in pango_layout_check_lines (layout=<optimized out>)
at ../pango/pango-layout.c:4208
#7 0x00007ffff72fe589 in pango_layout_get_extents_internal
(layout=0x555555ad1ee0 [PangoLayout], ink_rect=ink_rect@entry=0x0, logical_rect=logical_rect@entry=0x7fffffffc5b0, line_extents=line_extents@entry=0x0)
at ../pango/pango-layout.c:2658
#8 0x00007ffff72fe9b0 in pango_layout_get_extents
(layout=<optimized out>, ink_rect=ink_rect@entry=0x0, logical_rect=logical_rect@entry=0x7fffffffc5b0) at ../pango/pango-layout.c:2852
#9 0x00007ffff7ab6fdd in gtk_text_layout_get_line_display
(layout=layout@entry=0x5555557e4f00 [GtkTextLayout], line=line@entry=0x555555a61470, size_only=size_only@entry=1) at ../gtk/gtktextlayout.c:2576
#10 0x00007ffff7ab8076 in gtk_text_layout_real_wrap
(layout=0x5555557e4f00 [GtkTextLayout], line=0x555555a61470, line_data=0x555555914740) at ../gtk/gtktextlayout.c:1182
#11 0x00007ffff7a9a1d7 in _gtk_text_btree_validate_line
(tree=<optimized out>, line=line@entry=0x555555a61470, view_id=view_id@entry=0x5555557e4f00) at ../gtk/gtktextbtree.c:5461
#12 0x00007ffff7ab5ca3 in gtk_text_layout_validate_yrange
(layout=0x5555557e4f00 [GtkTextLayout], anchor=anchor@entry=0x7fffffffc7d0, y0=y0@entry=0, y1=563) at ../gtk/gtktextlayout.c:1091
#13 0x00007ffff7ac8295 in gtk_text_view_validate_onscreen
(text_view=text_view@entry=0x555555a5e930 [GtkTextView])
at ../gtk/gtktextview.c:10293
#14 0x00007ffff7ac8fee in gtk_text_view_flush_first_validate
(text_view=0x555555a5e930 [GtkTextView]) at ../gtk/gtktextview.c:4492
#15 0x00007ffff7ac999c in gtk_text_view_size_allocate
(widget=0x555555a5e930 [GtkTextView], allocation=<optimized out>)
at ../gtk/gtktextview.c:4396
#16 0x00007ffff7b372e7 in gtk_widget_size_allocate_with_baseline
(widget=widget@entry=0x555555a5e930 [GtkTextView], allocation=allocation@entry=0x7fffffffcae0, baseline=<optimized out>, baseline@entry=-1) at ../gtk/gtkwidget.c:6175
#17 0x00007ffff7b3764e in gtk_widget_size_allocate
(widget=widget@entry=0x555555a5e930 [GtkTextView], allocation=allocation@entry=0x7fffffffcae0) at ../gtk/gtkwidget.c:6256
#18 0x00007ffff7a5dcd2 in gtk_scrolled_window_allocate_child
(swindow=swindow@entry=0x555555a46d50 [GtkScrolledWindow], relative_allocation=relative_allocation@entry=0x7fffffffcb40) at ../gtk/gtkscrolledwindow.c:3307
#19 0x00007ffff7a5ee77 in gtk_scrolled_window_allocate
(gadget=<optimized out>, allocation=<optimized out>, baseline=<optimized out>, out_clip=<optimized out>, data=<optimized out>) at ../gtk/gtkscrolledwindow.c:1719
#20 0x00007ffff78f4ccc in gtk_css_gadget_allocate
(gadget=0x555555a73a80 [GtkCssCustomGadget], allocation=allocation@entry=0x7fffffffcc90, baseline=-1, out_clip=out_clip@entry=0x7fffffffcc80) at ../gtk/gtkcssgadget.c:790
#21 0x00007ffff7a60705 in gtk_scrolled_window_size_allocate
(widget=0x555555a46d50 [GtkScrolledWindow], allocation=0x7fffffffcd50)
at ../gtk/gtkscrolledwindow.c:3400
#22 0x00007ffff7b372e7 in gtk_widget_size_allocate_with_baseline
(widget=0x555555a46d50 [GtkScrolledWindow], allocation=allocation@entry=0x7fffffffce60, baseline=<optimized out>, baseline@entry=-1) at ../gtk/gtkwidget.c:6175
#23 0x00007ffff79fb045 in gtk_notebook_allocate_stack
(gadget=<optimized out>, allocation=0x7fffffffce60, baseline=-1, out_clip=0x7fffffffce80, unused=<optimized out>) at ../gtk/gtknotebook.c:2489
#24 0x00007ffff78f4ccc in gtk_css_gadget_allocate
--Type <RET> for more, q to quit, c to continue without paging--c
(gadget=0x5555559d6f10 [GtkCssCustomGadget], allocation=allocation@entry=0x7fffffffcf00, baseline=baseline@entry=-1, out_clip=out_clip@entry=0x7fffffffcfe0) at ../gtk/gtkcssgadget.c:790
#25 0x00007ffff789894b in gtk_box_gadget_allocate_child (child=0x5555559d6f10 [GtkCssCustomGadget], box_orientation=GTK_ORIENTATION_VERTICAL, child_align=<optimized out>, allocation=allocation@entry=0x7fffffffcfd0, baseline=baseline@entry=-1, out_clip=out_clip@entry=0x7fffffffcfe0) at ../gtk/gtkboxgadget.c:403
#26 0x00007ffff78996a8 in gtk_box_gadget_allocate (gadget=<optimized out>, allocation=0x7fffffffd080, baseline=<optimized out>, out_clip=<optimized out>) at ../gtk/gtkboxgadget.c:107
#27 0x00007ffff78f4ccc in gtk_css_gadget_allocate (gadget=0x5555559f5dc0 [GtkBoxGadget], allocation=allocation@entry=0x7fffffffd1c0, baseline=-1, out_clip=out_clip@entry=0x7fffffffd100) at ../gtk/gtkcssgadget.c:790
#28 0x00007ffff79fee24 in gtk_notebook_size_allocate (widget=0x555555a54230 [GtkNotebook], allocation=0x7fffffffd1c0) at ../gtk/gtknotebook.c:2506
#29 0x00007ffff7b372e7 in gtk_widget_size_allocate_with_baseline (widget=0x555555a54230 [GtkNotebook], allocation=allocation@entry=0x7fffffffd2f0, baseline=<optimized out>, baseline@entry=-1) at ../gtk/gtkwidget.c:6175
#30 0x00007ffff7895fc0 in gtk_box_size_allocate_no_center (widget=0x555555a42430 [GtkBox], allocation=<optimized out>) at ../gtk/gtkbox.c:817
#31 0x00007ffff78962e5 in gtk_box_allocate_contents (gadget=<optimized out>, allocation=0x7fffffffd3c0, baseline=<optimized out>, out_clip=0x7fffffffd3e0, unused=<optimized out>) at ../gtk/gtkbox.c:1211
#32 0x00007ffff78f4ccc in gtk_css_gadget_allocate (gadget=0x5555559dff20 [GtkCssCustomGadget], allocation=allocation@entry=0x7fffffffd4f0, baseline=-1, out_clip=out_clip@entry=0x7fffffffd440) at ../gtk/gtkcssgadget.c:790
#33 0x00007ffff7896e0f in gtk_box_size_allocate (widget=0x555555a42430 [GtkBox], allocation=0x7fffffffd4f0) at ../gtk/gtkbox.c:1225
#34 0x00007ffff7b372e7 in gtk_widget_size_allocate_with_baseline (widget=widget@entry=0x555555a42430 [GtkBox], allocation=allocation@entry=0x7fffffffd570, baseline=<optimized out>, baseline@entry=-1) at ../gtk/gtkwidget.c:6175
#35 0x00007ffff7b3764e in gtk_widget_size_allocate (widget=widget@entry=0x555555a42430 [GtkBox], allocation=allocation@entry=0x7fffffffd570) at ../gtk/gtkwidget.c:6256
#36 0x00007ffff7b4f8d3 in gtk_window_size_allocate (widget=<optimized out>, allocation=<optimized out>) at ../gtk/gtkwindow.c:7921
#37 0x00007ffff78881e0 in gtk_application_window_real_size_allocate (widget=0x555555a382c0 [GtkApplicationWindow], allocation=0x7fffffffd670) at ../gtk/gtkapplicationwindow.c:664
#38 0x00007ffff7b372e7 in gtk_widget_size_allocate_with_baseline (widget=widget@entry=0x555555a382c0 [GtkApplicationWindow], allocation=allocation@entry=0x7fffffffd710, baseline=<optimized out>, baseline@entry=-1) at ../gtk/gtkwidget.c:6175
#39 0x00007ffff7b3764e in gtk_widget_size_allocate (widget=widget@entry=0x555555a382c0 [GtkApplicationWindow], allocation=allocation@entry=0x7fffffffd710) at ../gtk/gtkwidget.c:6256
#40 0x00007ffff7b4d83a in gtk_window_realize (widget=0x555555a382c0 [GtkApplicationWindow]) at ../gtk/gtkwindow.c:7424
#41 0x00007ffff7888095 in gtk_application_window_real_realize (widget=0x555555a382c0 [GtkApplicationWindow]) at ../gtk/gtkapplicationwindow.c:681
#45 0x00007ffff7552103 in <emit signal ??? on instance 0x555555a382c0 [GtkApplicationWindow]> (instance=instance@entry=0x555555a382c0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3550
#42 0x00007ffff7532862 in g_closure_invoke (closure=0x5555557d75b0, return_value=0x0, n_param_values=1, param_values=0x7fffffffd9f0, invocation_hint=0x7fffffffd970) at ../gobject/gclosure.c:810
#43 0x00007ffff7546982 in signal_emit_unlocked_R (node=node@entry=0x5555557d03e0, detail=detail@entry=0, instance=instance@entry=0x555555a382c0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffd9f0) at ../gobject/gsignal.c:3668
#44 0x00007ffff7551bce in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffdba0) at ../gobject/gsignal.c:3494
#46 0x00007ffff7b3bddb in gtk_widget_realize (widget=widget@entry=0x555555a382c0 [GtkApplicationWindow]) at ../gtk/gtkwidget.c:5519
#47 0x00007ffff7b4b34f in gtk_window_show (widget=0x555555a382c0 [GtkApplicationWindow]) at ../gtk/gtkwindow.c:6181
#51 0x00007ffff7552103 in <emit signal ??? on instance 0x555555a382c0 [GtkApplicationWindow]> (instance=instance@entry=0x555555a382c0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3550
#48 0x00007ffff7532862 in g_closure_invoke (closure=0x5555557d79f0, return_value=0x0, n_param_values=1, param_values=0x7fffffffdef0, invocation_hint=0x7fffffffde70) at ../gobject/gclosure.c:810
#49 0x00007ffff7546982 in signal_emit_unlocked_R (node=node@entry=0x5555557c6850, detail=detail@entry=0, instance=instance@entry=0x555555a382c0, emission_return=emission_return@entry=0x0, instance_and_params=instance_and_params@entry=0x7fffffffdef0) at ../gobject/gsignal.c:3668
#50 0x00007ffff7551bce in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffe0a0) at ../gobject/gsignal.c:3494
#52 0x00007ffff7b3613e in gtk_widget_show (widget=0x555555a382c0 [GtkApplicationWindow]) at ../gtk/gtkwidget.c:4848
#53 0x00007ffff7b3613e in gtk_widget_show (widget=0x555555a382c0 [GtkApplicationWindow]) at ../gtk/gtkwidget.c:4821
#54 0x00005555555a1bd7 in activate (app=<optimized out>) at ../demos/gtk-demo/main.c:1044
#55 0x00005555555a1c94 in command_line (app=app@entry=0x5555557470f0 [GtkApplication], cmdline=0x5555559322e0 [GApplicationCommandLine]) at ../demos/gtk-demo/main.c:1090
#60 0x00007ffff7552103 in <emit signal ??? on instance 0x5555557470f0 [GtkApplication]> (instance=instance@entry=0x5555557470f0, signal_id=<optimized out>, detail=detail@entry=0) at ../gobject/gsignal.c:3550
#56 0x00007ffff73c2d6b in _g_cclosure_marshal_INT__OBJECT (closure=closure@entry=0x55555574c3a0, return_value=return_value@entry=0x7fffffffe460, n_param_values=n_param_values@entry=2, param_values=param_values@entry=0x7fffffffe4c0, invocation_hint=invocation_hint@entry=0x7fffffffe440, marshal_data=marshal_data@entry=0x0) at ../gio/gmarshal-internal.c:799
#57 0x00007ffff7532862 in g_closure_invoke (closure=0x55555574c3a0, return_value=0x7fffffffe460, n_param_values=2, param_values=0x7fffffffe4c0, invocation_hint=0x7fffffffe440) at ../gobject/gclosure.c:810
#58 0x00007ffff7546834 in signal_emit_unlocked_R (node=<optimized out>, detail=detail@entry=0, instance=instance@entry=0x5555557470f0, emission_return=emission_return@entry=0x7fffffffe5e0, instance_and_params=instance_and_params@entry=0x7fffffffe4c0) at ../gobject/gsignal.c:3738
#59 0x00007ffff755148d in g_signal_emit_valist (instance=<optimized out>, signal_id=<optimized out>, detail=<optimized out>, var_args=var_args@entry=0x7fffffffe690) at ../gobject/gsignal.c:3504
#61 0x00007ffff741e233 in g_application_call_command_line (exit_status=0x7fffffffe824, options=<optimized out>, arguments=<optimized out>, application=0x5555557470f0 [GtkApplication]) at ../gio/gapplication.c:1076
#62 0x00007ffff741e233 in g_application_call_command_line (application=0x5555557470f0 [GtkApplication], arguments=<optimized out>, options=<optimized out>, exit_status=0x7fffffffe824) at ../gio/gapplication.c:1054
#63 0x00007ffff7420ae9 in g_application_real_local_command_line (application=0x5555557470f0 [GtkApplication], arguments=0x7fffffffe828, exit_status=0x7fffffffe824) at ../gio/gapplication.c:1130
#64 0x00007ffff7420cb2 in g_application_run (application=0x5555557470f0 [GtkApplication], argc=<optimized out>, argv=<optimized out>) at ../gio/gapplication.c:2528
#65 0x000055555557bf9e in main (argc=1, argv=0x7fffffffe988) at ../demos/gtk-demo/main.c:1208
Edited by Thomas Preston