I have a Vala project which uses libpeas and I have discovered that it segment faults. I traced the error to this generated block of code and down to the first g_param_spec_object
call:
TROSS-MAC:genesis tristan$ head -n 785 builddir/plugins/gtk3/libgenesis-shell-gtk3.so.p/src/provider/monitor.c | tail -n 16
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
genesis_shell_gtk3_monitor_provider_parent_class = g_type_class_peek_parent (klass);
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
g_type_class_adjust_private_offset (klass, &GenesisShellGtk3MonitorProvider_private_offset);
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
G_OBJECT_CLASS (klass)->get_property = _vala_genesis_shell_gtk3_monitor_provider_get_property;
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
G_OBJECT_CLASS (klass)->set_property = _vala_genesis_shell_gtk3_monitor_provider_set_property;
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
G_OBJECT_CLASS (klass)->constructor = genesis_shell_gtk3_monitor_provider_constructor;
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
G_OBJECT_CLASS (klass)->finalize = genesis_shell_gtk3_monitor_provider_finalize;
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
g_object_class_install_property (G_OBJECT_CLASS (klass), GENESIS_SHELL_GTK3_MONITOR_PROVIDER_CONTEXT_PROPERTY, genesis_shell_gtk3_monitor_provider_properties[GENESIS_SHELL_GTK3_MONITOR_PROVIDER_CONTEXT_PROPERTY] = g_param_spec_object ("context", "context", "context", GENESIS_SHELL_TYPE_CONTEXT, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
#line 2 "../plugins/gtk3/src/provider/monitor.vala"
g_object_class_install_property (G_OBJECT_CLASS (klass), GENESIS_SHELL_GTK3_MONITOR_PROVIDER_PLUGIN_PROPERTY, genesis_shell_gtk3_monitor_provider_properties[GENESIS_SHELL_GTK3_MONITOR_PROVIDER_PLUGIN_PROPERTY] = g_param_spec_object ("plugin", "plugin", "plugin", GENESIS_SHELL_GTK3_TYPE_PLUGIN, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
The segment fault in question looks like this:
Process 66262 launched: '/Users/tristan/ExpidusOS/genesis/builddir/shell/genesis-shell' (x86_64)
(process:66262): Devident-DEBUG: 16:49:30.875: Discovered plugin devident-xml
(process:66262): Devident-DEBUG: 16:49:30.876: Adding plugin "devident-xml" 0x101f07f90
(process:66262): Devident-DEBUG: 16:49:30.876: Adding provider "DevidentXmlProvider" 0x101f08210
(process:66262): Devident-DEBUG: 16:49:30.876: context.vala:27: Global context uses libpeas
(process:66262): GenesisShell-DEBUG: 16:49:30.876: context.vala:230: Adding plugins path 0, lib: ./builddir/plugins, data: ./builddir/plugins
(process:66262): GenesisShell-DEBUG: 16:49:30.876: Genesis Shell context 0x103017090 is running in mode options
(process:66262): GenesisShell-DEBUG: 16:49:30.876: Plugin genesis-shell-gtk3 found in engine, trying to load
(process:66262): TokyoGtk-DEBUG: 16:49:31.211: init.vala:17: Initializing Tokyo GTK
2022-10-17 16:49:31.234505-0700 genesis-shell[66262:6494991] SecTaskLoadEntitlements failed error=22 cs_flags=20, pid=66262
2022-10-17 16:49:31.234573-0700 genesis-shell[66262:6494991] SecTaskCopyDebugDescription: genesis-shell[66262]/0#-1 LF=0
(<unknown>:66262): GLib-GIO-DEBUG: 16:49:31.493: _g_io_module_get_default: Found default implementation local (GLocalVfs) for ‘gio-vfs’
(<unknown>:66262): Handy-DEBUG: 16:49:31.553: Trying to initialize portal
(<unknown>:66262): Handy-DEBUG: 16:49:31.554: Settings portal not found: Cannot spawn a message bus without a machine-id: Unable to load /nix/store/s074aph9jwhs6cqsiqnm1mx25w4nv5r6-glib-2.72.3/var/lib/dbus/machine-id or /etc/machine-id: Failed to open file “/nix/store/s074aph9jwhs6cqsiqnm1mx25w4nv5r6-glib-2.72.3/var/lib/dbus/machine-id”: No such file or directory
(<unknown>:66262): GLib-GIO-CRITICAL **: 16:49:31.555: g_settings_schema_source_lookup: assertion 'source != NULL' failed
(<unknown>:66262): GLib-GIO-CRITICAL **: 16:49:31.555: g_settings_schema_source_lookup: assertion 'source != NULL' failed
(<unknown>:66262): TokyoGtk-DEBUG: 16:49:31.636: stylemanager.vala:29: registering for display tross-mac.local
(<unknown>:66262): TokyoGtk-DEBUG: 16:49:31.636: stylemanager.vala:51: Using night theme on display tross-mac.local
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Discovered plugin genesis-shell-gtk3
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Adding plugin "genesis-shell-gtk3" 0x103019910
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Plugin genesis-shell-gtk3 found in engine, trying to unload
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Discovered plugin genesis-shell-gtk3
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: context.vala:230: Adding plugins path 0, lib: ./builddir/plugins, data: ./builddir/plugins
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Genesis Shell context 0x10203e900 is running in mode big-picture
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Plugin genesis-shell-gtk3 found in engine, trying to load
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Discovered plugin genesis-shell-gtk3
(<unknown>:66262): GenesisShell-DEBUG: 16:49:31.721: Adding plugin "genesis-shell-gtk3" 0x11b844790
Process 66262 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x2609634)
frame #0: 0x00000001002d621b libgobject-2.0.0.dylib`type_node_check_conformities_UorL + 43
libgobject-2.0.0.dylib`type_node_check_conformities_UorL:
-> 0x1002d621b <+43>: movl 0x14(%rax), %edx
0x1002d621e <+46>: andl $0xff, %edx
0x1002d6224 <+52>: cmpl %edx, %ecx
0x1002d6226 <+54>: jg 0x1002d626e ; <+126>
Target 0: (genesis-shell) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x2609634)
* frame #0: 0x00000001002d621b libgobject-2.0.0.dylib`type_node_check_conformities_UorL + 43
frame #1: 0x00000001002d234c libgobject-2.0.0.dylib`type_node_conforms_to_U + 44
frame #2: 0x00000001002cc4ca libgobject-2.0.0.dylib`g_type_is_a + 122
frame #3: 0x00000001002bd80a libgobject-2.0.0.dylib`g_param_spec_object + 42
frame #4: 0x0000000100aa6ddd libgenesis-shell-gtk3.so`genesis_shell_gtk3_monitor_provider_class_init(klass=0x0000600003004900, klass_data=0x0000000000000000) at monitor.vala:2:216
frame #5: 0x00000001002d12f9 libgobject-2.0.0.dylib`type_class_init_Wm + 1593
frame #6: 0x00000001002cd49e libgobject-2.0.0.dylib`g_type_class_ref + 334
frame #7: 0x00000001002ae010 libgobject-2.0.0.dylib`g_object_new_valist + 176
frame #8: 0x00000001002adc62 libgobject-2.0.0.dylib`g_object_new + 402
frame #9: 0x0000000100aa6adc libgenesis-shell-gtk3.so`genesis_shell_gtk3_monitor_provider_construct(object_type=105553156162784, plugin=0x000000011b844790, cancellable=0x0000000000000000, error=0x00007ff7bfef2d70) at monitor.vala:18:44
frame #10: 0x0000000100aa6bad libgenesis-shell-gtk3.so`genesis_shell_gtk3_monitor_provider_new(plugin=0x000000011b844790, cancellable=0x0000000000000000, error=0x00007ff7bfef2d70) at monitor.vala:17:9
frame #11: 0x0000000100aa4518 libgenesis-shell-gtk3.so`genesis_shell_gtk3_plugin_real_activate(base=0x000000011b844790, cancellable=0x0000000000000000, error=0x00000001030282b0) at plugin.vala:14:12
frame #12: 0x000000010020208e libgenesis.0.dylib`genesis_shell_plugin_activate(self=0x000000011b844790, cancellable=0x0000000000000000, error=0x00000001030282b0) at plugin.vala:31:3
frame #13: 0x00000001001fb891 libgenesis.0.dylib`genesis_shell_context_do_plugin_added_co(_data_=0x0000000103028160) at context.vala:320:6
frame #14: 0x00000001001fb079 libgenesis.0.dylib`genesis_shell_context_do_plugin_added(self=0x000000010203e900, info=0x0000600003518000, plugin=0x000000011b844790, cancellable=0x0000000000000000, _callback_=(libgenesis.0.dylib`___lambda16__gasync_ready_callback at context.c:1385), _user_data_=0x00000001045b5f60) at context.vala:89:2
frame #15: 0x00000001001fc19d libgenesis.0.dylib`__lambda15_(self=0x000000010203e900, info=0x0000600003518000, obj=0x000000011b844790) at context.vala:253:2
frame #16: 0x00000001001fab7c libgenesis.0.dylib`___lambda15__peas_extension_set_extension_added(_sender=0x000000011b85ad60, info=0x0000600003518000, exten=0x000000011b844790, self=0x000000010203e900) at context.vala:252:2
frame #17: 0x000000010024af90 libpeas-1.0.0.dylib`peas_cclosure_marshal_VOID__BOXED_OBJECT + 240
frame #18: 0x00000001002a301a libgobject-2.0.0.dylib`g_closure_invoke + 570
frame #19: 0x00000001002c5d1d libgobject-2.0.0.dylib`signal_emit_unlocked_R + 1581
frame #20: 0x00000001002c7941 libgobject-2.0.0.dylib`g_signal_emit_valist + 5521
frame #21: 0x00000001002c82cf libgobject-2.0.0.dylib`g_signal_emit + 383
frame #22: 0x00000001002522d1 libpeas-1.0.0.dylib`add_extension + 225
frame #23: 0x00000001002a9876 libgobject-2.0.0.dylib`g_cclosure_marshal_VOID__BOXED + 262
frame #24: 0x00000001002a301a libgobject-2.0.0.dylib`g_closure_invoke + 570
frame #25: 0x00000001002c605e libgobject-2.0.0.dylib`signal_emit_unlocked_R + 2414
frame #26: 0x00000001002c7941 libgobject-2.0.0.dylib`g_signal_emit_valist + 5521
frame #27: 0x00000001002c82cf libgobject-2.0.0.dylib`g_signal_emit + 383
frame #28: 0x000000010024c455 libpeas-1.0.0.dylib`peas_engine_load_plugin + 341
frame #29: 0x00000001001fa86d libgenesis.0.dylib`genesis_shell_context_common_init(self=0x000000010203e900, error=0x000000011b8446c0) at context.vala:278:10
frame #30: 0x00000001001f9db5 libgenesis.0.dylib`genesis_shell_context_real_init_async_co(_data_=0x000000011b844680) at context.vala:191:2
frame #31: 0x00000001001f9b86 libgenesis.0.dylib`genesis_shell_context_real_init_async(base=0x000000010203e900, io_pri=0, cancellable=0x0000000000000000, _callback_=(libgenesis.0.dylib`genesis_shell_context_new_async_ready at context.c:697), _user_data_=0x000000011b82a000) at context.vala:89:2
frame #32: 0x000000010049777c libgio-2.0.0.dylib`g_async_initable_init_async + 252
frame #33: 0x00000001001f75e9 libgenesis.0.dylib`genesis_shell_context_construct_async_co(_data_=0x000000011b82a000) at context.vala:147:2
frame #34: 0x00000001001f743e libgenesis.0.dylib`genesis_shell_context_construct_async(object_type=105553156150816, mode=GENESIS_SHELL_CONTEXT_MODE_BIG_PICTURE, cancellable=0x0000000000000000, _callback_=(genesis-shell`run_ready at main.c:168), _user_data_=0x000000011b81e2e0) at context.vala:145:2
frame #35: 0x00000001001f77a3 libgenesis.0.dylib`genesis_shell_context_new_async(mode=GENESIS_SHELL_CONTEXT_MODE_BIG_PICTURE, cancellable=0x0000000000000000, _callback_=(genesis-shell`run_ready at main.c:168), _user_data_=0x000000011b81e2e0) at context.vala:145:2
frame #36: 0x0000000100002cc8 genesis-shell`run_co(_data_=0x000000011b81e2e0) at main.vala:12:3
frame #37: 0x0000000100002b13 genesis-shell`run(argv0="/Users/tristan/ExpidusOS/genesis/builddir/shell/genesis-shell", mode=GENESIS_SHELL_CONTEXT_MODE_BIG_PICTURE, loop=0x000060000000d300, _callback_=(genesis-shell`___lambda5__gasync_ready_callback at main.c:341), _user_data_=0x0000000000000000) at main.c:129:2
frame #38: 0x00000001000037d1 genesis-shell`_vala_main(args=0x00007ff7bfef4c60, args_length1=1) at main.vala:63:2
frame #39: 0x0000000100003092 genesis-shell`main(argc=3, argv=0x00007ff7bfef4c60) at main.vala:20:9
frame #40: 0x000000010000c52e dyld`start + 462
The type it is trying to pull is this one GenesisShellContext
from the GenesisShellGtk3MonitorManager
. I have never seen this kind of failure before and so I am unsure of the solution. Looking at other projects which use libpeas, it appears I am the only one with this issue.
I am currently on my mac but I can get a Linux version of the segment fault in a few hours. Edit: this appears to not occur on Linux.