If I logout of xfce and return to gdm then remotely remove my users home directory and login as that user again xfwm4 core dumps. If I logout and log back in again everything is fine (as long as I dont delete the user's home dir again). In xfce-shortcuts-provider.c:290 (xfce_shortcuts_provider_property_changed) provider->priv->custom_base_property is NULL which is causing the segfault. I'm not sure why it is NULL, but maybe you should check because for some reason in my case it is NULL. xfce4-settings seems to be core dumping at the same time. Maybe it is happening in the same location? Core was generated by `xfwm4'. Program terminated with signal 11, Segmentation fault. #0 __strlen_sse2 () at ../sysdeps/i386/i686/multiarch/strlen-sse2.S:46 46 cmpb $0, (%edx) (gdb) bt full #0 __strlen_sse2 () at ../sysdeps/i386/i686/multiarch/strlen-sse2.S:46 No locals. #1 0xb6e1d093 in g_str_has_prefix (str=0x8101dc8 "/providers", prefix=0x0) at gstrfuncs.c:2949 str_len = 10 prefix_len = <value optimized out> #2 0xb7801cea in xfce_shortcuts_provider_property_changed (channel=0x80f4e60, property=0x8101dc8 "/providers", value=0x8101dd8, provider=0x80f4e40) at xfce-shortcuts-provider.c:290 shortcut = <value optimized out> __PRETTY_FUNCTION__ = "xfce_shortcuts_provider_property_changed" #3 0xb77f9caf in _xfconf_marshal_VOID__STRING_BOXED (closure=0x8102508, return_value=0x0, n_param_values=3, param_values=0x80b5458, invocation_hint=0xbfd61e80, marshal_data=0x0) at xfconf-marshal.c:123 callback = 0xb7801c60 <xfce_shortcuts_provider_property_changed> cc = 0x8102508 data1 = <value optimized out> data2 = <value optimized out> __PRETTY_FUNCTION__ = "_xfconf_marshal_VOID__STRING_BOXED" #4 0xb6ed6b72 in g_closure_invoke (closure=0x8102508, return_value=0x0, n_param_values=3, param_values=0x80b5458, invocation_hint=0xbfd61e80) at gclosure.c:767 marshal = 0xb77f9c20 <_xfconf_marshal_VOID__STRING_BOXED> marshal_data = 0x0 in_marshal = 135270656 #5 0xb6ee4483 in signal_emit_unlocked_R (node=0x80b8038, detail=550, instance=0x80f4e60, emission_return=0x0, instance_and_params=0x80b5458) at gsignal.c:3252 tmp = <value optimized out> handler = 0x80f4f20 accumulator = 0x0 emission = {next = 0xbfd621c8, instance = 0x80f4e60, ihint = {signal_id = 93, detail = 550, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4} class_closure = 0x80dbea0 handler_list = 0x80f4f20 return_accu = 0x0 accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}} signal_id = 93 max_sequential_handler_number = 19 return_value_altered = 0 #6 0xb6eeb757 in g_signal_emit_valist (instance=0x80f4e60, signal_id=93, detail=550, var_args=0xbfd62044 "\340", <incomplete sequence \362>) at gsignal.c:2983 instance_and_params = 0x80b5458 signal_return_type = 4 param_values = 0x80b546c node = 0x80b8038 i = <value optimized out> n_params = 2 #7 0xb6eeb972 in g_signal_emit (instance=0x80f4e60, signal_id=93, detail=550) at gsignal.c:3040 var_args = 0xbfd6203c "pH\020\b\310\026\020\b\340", <incomplete sequence \362> #8 0xb77f54a2 in xfconf_channel_property_changed (cache=0x80f4e80, channel_name=0x8104850 "xfce4-keyboard-shortcuts", property=0x8104870 "/providers", value=0x81016c8, user_data=0x80f4e60) at xfconf-channel.c:391 channel = <value optimized out> #9 0xb77f9be6 in _xfconf_marshal_VOID__STRING_STRING_BOXED (closure=0x8103c18, return_value=0x0, n_param_values=4, param_values=0x80b5060, invocation_hint=0xbfd621d0, marshal_data=0x0) at xfconf-marshal.c:85 callback = 0xb77f53e0 <xfconf_channel_property_changed> cc = 0x8103c18 data1 = <value optimized out> data2 = <value optimized out> __PRETTY_FUNCTION__ = "_xfconf_marshal_VOID__STRING_STRING_BOXED" #10 0xb6ed6b72 in g_closure_invoke (closure=0x8103c18, return_value=0x0, n_param_values=4, param_values=0x80b5060, invocation_hint=0xbfd621d0) at gclosure.c:767 marshal = 0xb77f9b50 <_xfconf_marshal_VOID__STRING_STRING_BOXED> marshal_data = 0x0 in_marshal = 135272960 #11 0xb6ee4483 in signal_emit_unlocked_R (node=0x8100bd8, detail=0, instance=0x80f4e80, emission_return=0x0, instance_and_params=0x80b5060) at gsignal.c:3252 tmp = <value optimized out> handler = 0x80f4f00 accumulator = 0x0 emission = {next = 0x0, instance = 0x80f4e80, ihint = {signal_id = 94, detail = 0, run_type = G_SIGNAL_RUN_FIRST}, state = EMISSION_RUN, chain_type = 4} class_closure = 0x80b8020 handler_list = 0x80f4f00 return_accu = 0x0 accu = {g_type = 0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}} signal_id = 94 max_sequential_handler_number = 19 return_value_altered = 0 #12 0xb6eeb757 in g_signal_emit_valist (instance=0x80f4e80, signal_id=94, detail=0, var_args=0xbfd62398 "h\032\020\b@") at gsignal.c:2983 instance_and_params = 0x80b5060 signal_return_type = 4 param_values = 0x80b5074 node = 0x8100bd8 i = <value optimized out> n_params = 3 #13 0xb6eeb972 in g_signal_emit (instance=0x80f4e80, signal_id=94, detail=0) at gsignal.c:3040 var_args = 0xbfd6238c "h\032\020\b\037P\200\267l$h\032\020\b@" #14 0xb77f4944 in xfconf_cache_set (cache=0x80f4e80, property=0xb780501f "/providers", value=0xbfd6246c, error=0x0) at xfconf-cache.c:813 proxy = 0x80dc688 item = <value optimized out> old_item = <value optimized out> #15 0xb77f50dd in xfconf_channel_set_internal (channel=0x80f4e60, property=0xb780501f "/providers", value=0xbfd6246c) at xfconf-channel.c:407 ret = <value optimized out> real_property = 0xb780501f "/providers" __PRETTY_FUNCTION__ = "xfconf_channel_set_internal" #16 0xb77f780c in IA__xfconf_channel_set_arrayv (channel=0x80f4e60, property=0xb780501f "/providers", values=0x8104350) at xfconf-channel.c:1719 values_new = <value optimized out> val = {g_type = 135266240, data = {{v_int = 135283536, v_uint = 135283536, v_long = 135283536, v_ulong = 135283536, v_int64 = 135283536, v_uint64 = 135283536, v_float = 4.34125492e-34, v_double = 6.6838947585527527e-316, v_pointer = 0x8104350}, {v_int = 134217728, v_uint = 134217728, v_long = 134217728, v_ulong = 134217728, v_int64 = 134217728, v_uint64 = 134217728, v_float = 3.85185989e-34, v_double = 6.631236846766476e-316, v_pointer = 0x8000000}}} ret = <value optimized out> __PRETTY_FUNCTION__ = "IA__xfconf_channel_set_arrayv" #17 0xb77f7eb5 in IA__xfconf_channel_set_string_list (channel=0x80f4e60, property=0xb780501f "/providers", values=0x8102728) at xfconf-channel.c:1067 arr = 0x8104350 val = <value optimized out> i = <value optimized out> ret = <value optimized out> __PRETTY_FUNCTION__ = "IA__xfconf_channel_set_string_list" #18 0xb780242e in xfce_shortcuts_provider_register (object=0x80f4e40) at xfce-shortcuts-provider.c:266 provider_names = 0x8103ef0 i = <value optimized out> names = 0x8102728 already_registered = 0 name = 0x8101ad0 "xfwm4" #19 xfce_shortcuts_provider_constructed (object=0x80f4e40) at xfce-shortcuts-provider.c:163 provider = 0x80f4e40 #20 0xb6edac5a in g_object_newv (object_type=135118200, n_parameters=1, parameters=0x8102590) at gobject.c:1507 cparams = <value optimized out> oparams = 0x8102718 nqueue = <value optimized out> object = 0x80f4e40 class = 0x8100b70 unref_class = 0x0 slist = <value optimized out> n_total_cparams = <value optimized out> n_cparams = <value optimized out> n_oparams = 0 n_cvalues = <value optimized out> cvalues = <value optimized out> clist = <value optimized out> newly_constructed = 1 i = <value optimized out> __PRETTY_FUNCTION__ = "g_object_newv" #21 0xb6edb66b in g_object_new_valist (object_type=135118200, first_property_name=0xb7804f81 "name", var_args=<value optimized out>) at gobject.c:1596 class = 0x8100b70 params = 0x8102590 name = <value optimized out> object = <value optimized out> n_params = <value optimized out> n_alloced_params = <value optimized out> __PRETTY_FUNCTION__ = "g_object_new_valist" #22 0xb6edb78f in g_object_new (object_type=135118200, first_property_name=0xb7804f81 "name") at gobject.c:1311 var_args = 0xbfd626f8 "ߕ\b\b" #23 0xb7801df8 in xfce_shortcuts_provider_new (name=0x80895df "xfwm4") at xfce-shortcuts-provider.c:318 No locals. #24 0x0807eb8a in initSettings (screen_info=0x80d33c0) at settings.c:1022 keymap = <value optimized out> display_info = 0x80d1438 names = 0x0 val = 0 i = 0 __PRETTY_FUNCTION__ = "initSettings" #25 0x0806ba53 in initialize (argc=1, argv=0xbfd628f4) at main.c:462 screen_info = 0x80d33c0 gscr = <value optimized out> ws = 134762073 i = <value optimized out> nscreens = 1 #26 main (argc=1, argv=0xbfd628f4) at main.c:589 daemon_mode = 0 version = 0 replace_wm = 0 status = 0 context = <value optimized out> error = 0x0 option_entries = {{long_name = 0x808960c "daemon", short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0xbfd6282c, description = 0x8089613 "Fork to the background", arg_description = 0x0}, {long_name = 0x808962a "compositor", short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_CALLBACK, arg_data = 0x806b680, description = 0x8089635 "Set the compositor mode", arg_description = 0x808964d "on|off|auto"}, { long_name = 0x8089659 "replace", short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0xbfd62824, description = 0x808977c "Replace the existing window manager", arg_description = 0x0}, {long_name = 0x8089661 "version", short_name = 86 'V', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0xbfd62828, description = 0x80897a0 "Print version information and exit", arg_description = 0x0}, {long_name = 0x0, short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x0, description = 0x0, arg_description = 0x0}}
I've looked into it a bit more. I was getting some nuisance errors logged by gdm on my distro so I rebuilt glib with --enable-debug=no. It looks like it may cause g_return_val_if_fail not to perform the check in g_str_has_prefix. I was under the impression that setting --enable-debug=no simply stopped those messages from going to syslog. If you don't intend for xfce to work when glib is built with --enable-debug=no then I think you can close this and mark as won't fix. However, if you intend for xfce to work when glib is built with --enable-debug=no you should probably do something about this.
custom_base_property can only be null if the object is used before construction of already freed. So it does not look like a problem in the library.