Hello,
not being the maintainer I tried to reproduce the issue.
I think we see here an exhaustion of the stack.
Because clicking on the zoom button triggers a
change of a g_settings/dconf entry.
That triggers the callback view_set_scalex into florence.
That tries to set the g_settings/dconf entry again.
And so on.
Attached (ugly) patch avoids the recursion by leaving functions
view_set_scalex and view_set_scaley if we are already executing them.
But there is probably a better way by using
g_signal_handler_block/unblock?
Kind regards,
Bernhard
benutzer@debian:~$ gdb -q --args florence
Reading symbols from florence...Reading symbols from
/usr/lib/debug/.build-id/50/4563f002de302f17974c902b711a2e6280778d.debug...done.
done.
(gdb) run
Starting program: /usr/bin/florence
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
Florence version 0.6.3
[New Thread 0x7fffe4823700 (LWP 557)]
[New Thread 0x7fffe4022700 (LWP 558)]
[New Thread 0x7fffe3821700 (LWP 559)]
[New Thread 0x7fffe3020700 (LWP 560)]
[New Thread 0x7fffe23d8700 (LWP 562)]
XRecord extension found version=1.13
Your screen does not support alpha channel. Semi-transparency is disabled
[New Thread 0x7fffe191b700 (LWP 565)]
WARNING: Service name lost.
WARNING: Notification failed
(florence:552): GLib-GObject-CRITICAL **: g_object_set: assertion 'G_IS_OBJECT
(object)' failed
(florence:552): GStreamer-CRITICAL **: gst_element_get_bus: assertion
'GST_IS_ELEMENT (element)' failed
(florence:552): GStreamer-CRITICAL **: gst_bus_add_watch_full: assertion
'GST_IS_BUS (bus)' failed
(florence:552): GStreamer-CRITICAL **: gst_object_unref: assertion 'object !=
NULL' failed
(florence:552): dconf-WARNING **: failed to commit changes to dconf: Failed to
execute child process "dbus-launch" (Datei oder Verzeichnis nicht gefunden)
(florence:552): dconf-WARNING **: failed to commit changes to dconf: Failed to
execute child process "dbus-launch" (Datei oder Verzeichnis nicht gefunden)
...
(florence:552): dconf-WARNING **: failed to commit changes to dconf: Failed to
execute child process "dbus-launch" (Datei oder Verzeichnis nicht gefunden)
Thread 1 "florence" received signal SIGSEGV, Segmentation fault.
g_settings_get_value (settings=0x5555557e25c0 [GSettings],
key=key@entry=0x555555578638 "scalex") at ././gio/gsettings.c:1200
1200 ././gio/gsettings.c: Datei oder Verzeichnis nicht gefunden.
(gdb) bt
#0 0x00007ffff457488e in g_settings_get_value (settings=0x5555557e25c0
[GSettings], key=key@entry=0x555555578638 "scalex") at ././gio/gsettings.c:1200
#1 0x00005555555685ed in settings_value_get (item=item@entry=SETTINGS_SCALEX)
at settings.c:348
#2 0x0000555555568877 in settings_get_double (item=item@entry=SETTINGS_SCALEX)
at settings.c:407
#3 0x000055555556e7a6 in view_set_scalex (settings=0x5555557e25c0 [GSettings],
key=0x55555588a31d "scalex", user_data=0x555555907a30) at view.c:733
#7 0x00007ffff4242fbf in <emit signal changed:scalex on instance
0x5555557e25c0 [GSettings]> (instance=instance@entry=0x5555557e25c0,
signal_id=<optimized out>, detail=<optimized out>) at ././gobject/gsignal.c:3447
#4 0x00007ffff4227ecf in g_closure_invoke (closure=0x55555599c660,
return_value=return_value@entry=0x0, n_param_values=2,
param_values=param_values@entry=0x7fffff7ff280,
invocation_hint=invocation_hint@entry=0x7fffff7ff200) at
././gobject/gclosure.c:804
#5 0x00007ffff4239f82 in signal_emit_unlocked_R
(node=node@entry=0x555555879a40, detail=detail@entry=1267,
instance=instance@entry=0x5555557e25c0,
emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fffff7ff280)
at ././gobject/gsignal.c:3635
#6 0x00007ffff4242bdc in g_signal_emit_valist (instance=<optimized out>,
signal_id=<optimized out>, detail=<optimized out>,
var_args=var_args@entry=0x7fffff7ff440) at ././gobject/gsignal.c:3391
#8 0x00007ffff4573516 in g_settings_real_change_event (settings=0x5555557e25c0
[GSettings], keys=0x7fffff7ffb04, n_keys=<optimized out>) at
././gio/gsettings.c:386
#9 0x00007fffecdb0038 in ffi_call_unix64 () at ../src/x86/unix64.S:76
#10 0x00007fffecdafa9a in ffi_call (cif=cif@entry=0x7fffff7ff790,
fn=fn@entry=0x7ffff45734a0 <g_settings_real_change_event>, rvalue=<optimized
out>, avalue=avalue@entry=0x7fffff7ff680) at ../src/x86/ffi64.c:525
#11 0x00007ffff4228c8a in g_cclosure_marshal_generic_va
(closure=0x555555879af0, return_value=0x7fffff7ff950, instance=<optimized out>,
args_list=<optimized out>, marshal_data=<optimized out>, n_params=2,
param_types=0x555555879b20) at ././gobject/gclosure.c:1604
#12 0x00007ffff42280f2 in _g_closure_invoke_va
(closure=closure@entry=0x555555879af0,
return_value=return_value@entry=0x7fffff7ff950,
instance=instance@entry=0x5555557e25c0, args=args@entry=0x7fffff7ffa20,
n_params=2, param_types=0x555555879b20)
at ././gobject/gclosure.c:867
#13 0x00007ffff42423a1 in g_signal_emit_valist (instance=0x5555557e25c0,
signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffff7ffa20) at
././gobject/gsignal.c:3300
#14 0x00007ffff4242fbf in g_signal_emit
(instance=instance@entry=0x5555557e25c0, signal_id=<optimized out>,
detail=detail@entry=0) at ././gobject/gsignal.c:3447
#15 0x00007ffff4573154 in settings_backend_changed (target=0x5555557e25c0
[GSettings], backend=<optimized out>, key=<optimized out>,
origin_tag=<optimized out>) at ././gio/gsettings.c:446
#16 0x00007ffff456e89a in g_settings_backend_invoke_closure
(user_data=0x555555f05100) at ././gio/gsettingsbackend.c:267
#17 0x00007ffff3f4f725 in g_main_context_invoke_full (context=0x5555557c2f10,
priority=0, function=0x7ffff456e880 <g_settings_backend_invoke_closure>,
data=0x555555f05100, notify=0x0) at ././glib/gmain.c:5742
#18 0x00007ffff3f4f830 in g_main_context_invoke (context=<optimized out>,
function=<optimized out>, data=<optimized out>) at ././glib/gmain.c:5703
#19 0x00007ffff456e9a8 in g_settings_backend_dispatch_signal
(backend=0x555555863c90 [DConfSettingsBackend], function_offset=0,
name=0x555555f04eb0 "/apps/florence/window/scalex", origin_tag=0x0, names=0x0)
at ././gio/gsettingsbackend.c:322
#20 0x00007fffe23dd344 in dconf_engine_emit_changes
(engine=engine@entry=0x555555865af0, changeset=changeset@entry=0x555555f04b00,
origin_tag=origin_tag@entry=0x0) at dconf-engine.c:977
#21 0x00007fffe23de5a9 in dconf_engine_change_fast (engine=0x555555865af0,
changeset=changeset@entry=0x555555f04b00, origin_tag=origin_tag@entry=0x0,
error=error@entry=0x0) at dconf-engine.c:1192
#22 0x00007fffe23dce9c in dconf_settings_backend_write (backend=0x555555863c90
[DConfSettingsBackend], key=0x555555f04d10 "/apps/florence/window/scalex",
value=0x555555f04a10, origin_tag=0x0) at dconfsettingsbackend.c:76
#23 0x00007ffff456f3a4 in g_settings_backend_write (backend=0x555555863c90
[DConfSettingsBackend], key=key@entry=0x555555f04d10
"/apps/florence/window/scalex", value=value@entry=0x555555f04a10,
origin_tag=origin_tag@entry=0x0) at ././gio/gsettingsbackend.c:783
#24 0x00007ffff4573df3 in g_settings_write_to_backend
(settings=settings@entry=0x5555557e25c0 [GSettings],
value=value@entry=0x555555f04a10, key=<optimized out>) at
././gio/gsettings.c:1144
#25 0x00007ffff4575265 in g_settings_set_value (settings=0x5555557e25c0
[GSettings], key=key@entry=0x555555578638 "scalex", value=0x555555f04a10) at
././gio/gsettings.c:1597
#26 0x00007ffff4575985 in g_settings_set_double (settings=<optimized out>,
key=key@entry=0x555555578638 "scalex", value=value@entry=21) at
././gio/gsettings.c:2104
#27 0x0000555555568a52 in settings_set_double (item=item@entry=SETTINGS_SCALEX,
value=21, b=b@entry=1) at settings.c:432
#28 0x0000555555566301 in key_release (key=key@entry=0x5555559078c0,
status=status@entry=0x5555558a7800) at key.c:349
#29 0x0000555555570aa1 in status_release (status=0x5555558a7800,
key=0x5555559078c0) at status.c:289
#30 0x00005555555747b8 in fsm_process (status=status@entry=0x5555558a7800,
key=0x5555559078c0, event=event@entry=FSM_RELEASE) at fsm.c:197
#31 0x0000555555570906 in status_pressed_set
(status=status@entry=0x5555558a7800, pressed=pressed@entry=0x0) at status.c:222
#32 0x0000555555570a24 in status_focus_set (status=0x5555558a7800,
focus=focus@entry=0x0) at status.c:183
#33 0x000055555556e704 in view_update_extensions
(settings=settings@entry=0x5555557e25c0 [GSettings],
key=key@entry=0x55555588a31d "scalex",
user_data=user_data@entry=0x555555907a30) at view.c:720
#34 0x000055555556e7d1 in view_set_scalex (settings=0x5555557e25c0 [GSettings],
key=0x55555588a31d "scalex", user_data=0x555555907a30) at view.c:735
#38 0x00007ffff4242fbf in <emit signal changed:scalex on instance
0x5555557e25c0 [GSettings]> (instance=instance@entry=0x5555557e25c0,
signal_id=<optimized out>, detail=<optimized out>) at ././gobject/gsignal.c:3447
#35 0x00007ffff4227ecf in g_closure_invoke (closure=0x55555599c660,
return_value=return_value@entry=0x0, n_param_values=2,
param_values=param_values@entry=0x7fffff8000a0,
invocation_hint=invocation_hint@entry=0x7fffff800020) at
././gobject/gclosure.c:804
#36 0x00007ffff4239f82 in signal_emit_unlocked_R
(node=node@entry=0x555555879a40, detail=detail@entry=1267,
instance=instance@entry=0x5555557e25c0,
emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fffff8000a0)
at ././gobject/gsignal.c:3635
#37 0x00007ffff4242bdc in g_signal_emit_valist (instance=<optimized out>,
signal_id=<optimized out>, detail=<optimized out>,
var_args=var_args@entry=0x7fffff800260) at ././gobject/gsignal.c:3391
#39 0x00007ffff4573516 in g_settings_real_change_event (settings=0x5555557e25c0
[GSettings], keys=0x7fffff800924, n_keys=<optimized out>) at
././gio/gsettings.c:386
#40 0x00007fffecdb0038 in ffi_call_unix64 () at ../src/x86/unix64.S:76
#41 0x00007fffecdafa9a in ffi_call (cif=cif@entry=0x7fffff8005b0,
fn=fn@entry=0x7ffff45734a0 <g_settings_real_change_event>, rvalue=<optimized
out>, avalue=avalue@entry=0x7fffff8004a0) at ../src/x86/ffi64.c:525
#42 0x00007ffff4228c8a in g_cclosure_marshal_generic_va
(closure=0x555555879af0, return_value=0x7fffff800770, instance=<optimized out>,
args_list=<optimized out>, marshal_data=<optimized out>, n_params=2,
param_types=0x555555879b20) at ././gobject/gclosure.c:1604
#43 0x00007ffff42280f2 in _g_closure_invoke_va
(closure=closure@entry=0x555555879af0,
return_value=return_value@entry=0x7fffff800770,
instance=instance@entry=0x5555557e25c0, args=args@entry=0x7fffff800840,
n_params=2, param_types=0x555555879b20)
at ././gobject/gclosure.c:867
#44 0x00007ffff42423a1 in g_signal_emit_valist (instance=0x5555557e25c0,
signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffff800840) at
././gobject/gsignal.c:3300
#45 0x00007ffff4242fbf in g_signal_emit
(instance=instance@entry=0x5555557e25c0, signal_id=<optimized out>,
detail=detail@entry=0) at ././gobject/gsignal.c:3447
#46 0x00007ffff4573154 in settings_backend_changed (target=0x5555557e25c0
[GSettings], backend=<optimized out>, key=<optimized out>,
origin_tag=<optimized out>) at ././gio/gsettings.c:446
#47 0x00007ffff456e89a in g_settings_backend_invoke_closure
(user_data=0x7fffdc40ce80) at ././gio/gsettingsbackend.c:267
#48 0x00007ffff3f4f725 in g_main_context_invoke_full (context=0x5555557c2f10,
priority=0, function=0x7ffff456e880 <g_settings_backend_invoke_closure>,
data=0x7fffdc40ce80, notify=0x0) at ././glib/gmain.c:5742
#49 0x00007ffff3f4f830 in g_main_context_invoke (context=<optimized out>,
function=<optimized out>, data=<optimized out>) at ././glib/gmain.c:5703
#50 0x00007ffff456e9a8 in g_settings_backend_dispatch_signal
(backend=0x555555863c90 [DConfSettingsBackend], function_offset=0,
name=0x555555f04c60 "/apps/florence/window/scalex", origin_tag=0x0, names=0x0)
at ././gio/gsettingsbackend.c:322
#51 0x00007fffe23dd344 in dconf_engine_emit_changes
(engine=engine@entry=0x555555865af0, changeset=changeset@entry=0x555555f04980,
origin_tag=origin_tag@entry=0x0) at dconf-engine.c:977
#52 0x00007fffe23de5a9 in dconf_engine_change_fast (engine=0x555555865af0,
changeset=changeset@entry=0x555555f04980, origin_tag=origin_tag@entry=0x0,
error=error@entry=0x0) at dconf-engine.c:1192
#53 0x00007fffe23dce9c in dconf_settings_backend_write (backend=0x555555863c90
[DConfSettingsBackend], key=0x555555f04260 "/apps/florence/window/scalex",
value=0x555555f04ad0, origin_tag=0x0) at dconfsettingsbackend.c:76
#54 0x00007ffff456f3a4 in g_settings_backend_write (backend=0x555555863c90
[DConfSettingsBackend], key=key@entry=0x555555f04260
"/apps/florence/window/scalex", value=value@entry=0x555555f04ad0,
origin_tag=origin_tag@entry=0x0) at ././gio/gsettingsbackend.c:783
#55 0x00007ffff4573df3 in g_settings_write_to_backend
(settings=settings@entry=0x5555557e25c0 [GSettings],
value=value@entry=0x555555f04ad0, key=<optimized out>) at
././gio/gsettings.c:1144
#56 0x00007ffff4575265 in g_settings_set_value (settings=0x5555557e25c0
[GSettings], key=key@entry=0x555555578638 "scalex", value=0x555555f04ad0) at
././gio/gsettings.c:1597
#57 0x00007ffff4575985 in g_settings_set_double (settings=<optimized out>,
key=key@entry=0x555555578638 "scalex", value=value@entry=21) at
././gio/gsettings.c:2104
#58 0x0000555555568a52 in settings_set_double (item=item@entry=SETTINGS_SCALEX,
value=21, b=b@entry=1) at settings.c:432
#59 0x0000555555566301 in key_release (key=key@entry=0x5555559078c0,
status=status@entry=0x5555558a7800) at key.c:349
...
#71824 0x0000555555566301 in key_release (key=key@entry=0x5555559078c0,
status=status@entry=0x5555558a7800) at key.c:349
#71825 0x0000555555570aa1 in status_release (status=0x5555558a7800,
key=0x5555559078c0) at status.c:289
#71826 0x00005555555747b8 in fsm_process (status=status@entry=0x5555558a7800,
key=0x5555559078c0, event=event@entry=FSM_RELEASE) at fsm.c:197
#71827 0x0000555555570906 in status_pressed_set
(status=status@entry=0x5555558a7800, pressed=pressed@entry=0x0) at status.c:222
#71828 0x0000555555570a24 in status_focus_set (status=0x5555558a7800,
focus=focus@entry=0x0) at status.c:183
#71829 0x000055555556e704 in view_update_extensions
(settings=settings@entry=0x5555557e25c0 [GSettings],
key=key@entry=0x55555588a31d "scalex",
user_data=user_data@entry=0x555555907a30) at view.c:720
#71830 0x000055555556e7d1 in view_set_scalex (settings=0x5555557e25c0
[GSettings], key=0x55555588a31d "scalex", user_data=0x555555907a30) at
view.c:735
#71834 0x00007ffff4242fbf in <emit signal changed:scalex on instance
0x5555557e25c0 [GSettings]> (instance=instance@entry=0x5555557e25c0,
signal_id=<optimized out>, detail=<optimized out>) at ././gobject/gsignal.c:3447
#71831 0x00007ffff4227ecf in g_closure_invoke (closure=0x55555599c660,
return_value=return_value@entry=0x0, n_param_values=2,
param_values=param_values@entry=0x7fffffffca20,
invocation_hint=invocation_hint@entry=0x7fffffffc9a0) at
././gobject/gclosure.c:804
#71832 0x00007ffff4239f82 in signal_emit_unlocked_R
(node=node@entry=0x555555879a40, detail=detail@entry=1267,
instance=instance@entry=0x5555557e25c0,
emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fffffffca20)
at ././gobject/gsignal.c:3635
#71833 0x00007ffff4242bdc in g_signal_emit_valist (instance=<optimized
out>, signal_id=<optimized out>, detail=<optimized out>,
var_args=var_args@entry=0x7fffffffcbe0) at ././gobject/gsignal.c:3391
#71835 0x00007ffff4573516 in g_settings_real_change_event
(settings=0x5555557e25c0 [GSettings], keys=0x7fffffffd2a4, n_keys=<optimized
out>) at ././gio/gsettings.c:386
#71836 0x00007fffecdb0038 in ffi_call_unix64 () at ../src/x86/unix64.S:76
#71837 0x00007fffecdafa9a in ffi_call (cif=cif@entry=0x7fffffffcf30,
fn=fn@entry=0x7ffff45734a0 <g_settings_real_change_event>, rvalue=<optimized
out>, avalue=avalue@entry=0x7fffffffce20) at ../src/x86/ffi64.c:525
#71838 0x00007ffff4228c8a in g_cclosure_marshal_generic_va
(closure=0x555555879af0, return_value=0x7fffffffd0f0, instance=<optimized out>,
args_list=<optimized out>, marshal_data=<optimized out>, n_params=2,
param_types=0x555555879b20) at ././gobject/gclosure.c:1604
#71839 0x00007ffff42280f2 in _g_closure_invoke_va
(closure=closure@entry=0x555555879af0,
return_value=return_value@entry=0x7fffffffd0f0,
instance=instance@entry=0x5555557e25c0, args=args@entry=0x7fffffffd1c0,
n_params=2, param_types=0x555555879b20)
at ././gobject/gclosure.c:867
#71840 0x00007ffff42423a1 in g_signal_emit_valist (instance=0x5555557e25c0,
signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffd1c0) at
././gobject/gsignal.c:3300
#71841 0x00007ffff4242fbf in g_signal_emit
(instance=instance@entry=0x5555557e25c0, signal_id=<optimized out>,
detail=detail@entry=0) at ././gobject/gsignal.c:3447
#71842 0x00007ffff4573154 in settings_backend_changed (target=0x5555557e25c0
[GSettings], backend=<optimized out>, key=<optimized out>,
origin_tag=<optimized out>) at ././gio/gsettings.c:446
#71843 0x00007ffff456e89a in g_settings_backend_invoke_closure
(user_data=0x5555559fccc0) at ././gio/gsettingsbackend.c:267
#71844 0x00007ffff3f4f725 in g_main_context_invoke_full
(context=0x5555557c2f10, priority=0, function=0x7ffff456e880
<g_settings_backend_invoke_closure>, data=0x5555559fccc0, notify=0x0) at
././glib/gmain.c:5742
#71845 0x00007ffff3f4f830 in g_main_context_invoke (context=<optimized out>,
function=<optimized out>, data=<optimized out>) at ././glib/gmain.c:5703
#71846 0x00007ffff456e9a8 in g_settings_backend_dispatch_signal
(backend=0x555555863c90 [DConfSettingsBackend], function_offset=0,
name=0x5555559df350 "/apps/florence/window/scalex", origin_tag=0x0, names=0x0)
at ././gio/gsettingsbackend.c:322
#71847 0x00007fffe23dd344 in dconf_engine_emit_changes
(engine=engine@entry=0x555555865af0, changeset=changeset@entry=0x5555558e7830,
origin_tag=origin_tag@entry=0x0) at dconf-engine.c:977
#71848 0x00007fffe23de5a9 in dconf_engine_change_fast (engine=0x555555865af0,
changeset=changeset@entry=0x5555558e7830, origin_tag=origin_tag@entry=0x0,
error=error@entry=0x0) at dconf-engine.c:1192
#71849 0x00007fffe23dce9c in dconf_settings_backend_write
(backend=0x555555863c90 [DConfSettingsBackend], key=0x55555599ed60
"/apps/florence/window/scalex", value=0x55555594f040, origin_tag=0x0) at
dconfsettingsbackend.c:76
#71850 0x00007ffff456f3a4 in g_settings_backend_write (backend=0x555555863c90
[DConfSettingsBackend], key=key@entry=0x55555599ed60
"/apps/florence/window/scalex", value=value@entry=0x55555594f040,
origin_tag=origin_tag@entry=0x0) at ././gio/gsettingsbackend.c:783
#71851 0x00007ffff4573df3 in g_settings_write_to_backend
(settings=settings@entry=0x5555557e25c0 [GSettings],
value=value@entry=0x55555594f040, key=<optimized out>) at
././gio/gsettings.c:1144
#71852 0x00007ffff4575265 in g_settings_set_value (settings=0x5555557e25c0
[GSettings], key=key@entry=0x555555578638 "scalex", value=0x55555594f040) at
././gio/gsettings.c:1597
#71853 0x00007ffff4575985 in g_settings_set_double (settings=<optimized out>,
key=key@entry=0x555555578638 "scalex", value=value@entry=21) at
././gio/gsettings.c:2104
#71854 0x0000555555568a52 in settings_set_double
(item=item@entry=SETTINGS_SCALEX, value=21, b=b@entry=1) at settings.c:432
#71855 0x0000555555566301 in key_release (key=key@entry=0x5555559078c0,
status=status@entry=0x5555558a7800) at key.c:349
#71856 0x0000555555570aa1 in status_release (status=0x5555558a7800,
key=0x5555559078c0) at status.c:289
#71857 0x00005555555747b8 in fsm_process (status=status@entry=0x5555558a7800,
key=0x5555559078c0, event=event@entry=FSM_RELEASE) at fsm.c:197
#71858 0x0000555555570906 in status_pressed_set
(status=status@entry=0x5555558a7800, pressed=pressed@entry=0x0) at status.c:222
#71859 0x0000555555570a24 in status_focus_set (status=0x5555558a7800,
focus=focus@entry=0x0) at status.c:183
#71860 0x000055555556e704 in view_update_extensions
(settings=settings@entry=0x5555557e25c0 [GSettings],
key=key@entry=0x55555588a31d "scalex",
user_data=user_data@entry=0x555555907a30) at view.c:720
#71861 0x000055555556e7d1 in view_set_scalex (settings=0x5555557e25c0
[GSettings], key=0x55555588a31d "scalex", user_data=0x555555907a30) at
view.c:735
#71865 0x00007ffff4242fbf in <emit signal changed:scalex on instance
0x5555557e25c0 [GSettings]> (instance=instance@entry=0x5555557e25c0,
signal_id=<optimized out>, detail=<optimized out>) at ././gobject/gsignal.c:3447
#71862 0x00007ffff4227f75 in g_closure_invoke (closure=0x55555599c660,
return_value=return_value@entry=0x0, n_param_values=2,
param_values=param_values@entry=0x7fffffffd840,
invocation_hint=invocation_hint@entry=0x7fffffffd7c0) at
././gobject/gclosure.c:804
#71863 0x00007ffff4239f82 in signal_emit_unlocked_R
(node=node@entry=0x555555879a40, detail=detail@entry=1267,
instance=instance@entry=0x5555557e25c0,
emission_return=emission_return@entry=0x0,
instance_and_params=instance_and_params@entry=0x7fffffffd840)
at ././gobject/gsignal.c:3635
#71864 0x00007ffff4242bdc in g_signal_emit_valist (instance=<optimized
out>, signal_id=<optimized out>, detail=<optimized out>,
var_args=var_args@entry=0x7fffffffda00) at ././gobject/gsignal.c:3391
#71866 0x00007ffff4573516 in g_settings_real_change_event
(settings=0x5555557e25c0 [GSettings], keys=0x7fffffffe0c4, n_keys=<optimized
out>) at ././gio/gsettings.c:386
#71867 0x00007fffecdb0038 in ffi_call_unix64 () at ../src/x86/unix64.S:76
---Type <return> to continue, or q <return> to quit---
#71868 0x00007fffecdafa9a in ffi_call (cif=cif@entry=0x7fffffffdd50,
fn=fn@entry=0x7ffff45734a0 <g_settings_real_change_event>, rvalue=<optimized
out>, avalue=avalue@entry=0x7fffffffdc40) at ../src/x86/ffi64.c:525
#71869 0x00007ffff4228c8a in g_cclosure_marshal_generic_va
(closure=0x555555879af0, return_value=0x7fffffffdf10, instance=<optimized out>,
args_list=<optimized out>, marshal_data=<optimized out>, n_params=2,
param_types=0x555555879b20) at ././gobject/gclosure.c:1604
#71870 0x00007ffff42281a4 in _g_closure_invoke_va
(closure=closure@entry=0x555555879af0,
return_value=return_value@entry=0x7fffffffdf10,
instance=instance@entry=0x5555557e25c0, args=args@entry=0x7fffffffdfe0,
n_params=<optimized out>, param_types=0x555555879b20)
at ././gobject/gclosure.c:867
#71871 0x00007ffff42423a1 in g_signal_emit_valist (instance=0x5555557e25c0,
signal_id=<optimized out>, detail=0, var_args=var_args@entry=0x7fffffffdfe0) at
././gobject/gsignal.c:3300
#71872 0x00007ffff4242fbf in g_signal_emit
(instance=instance@entry=0x5555557e25c0, signal_id=<optimized out>,
detail=detail@entry=0) at ././gobject/gsignal.c:3447
#71873 0x00007ffff4573154 in settings_backend_changed (target=0x5555557e25c0
[GSettings], backend=<optimized out>, key=<optimized out>,
origin_tag=<optimized out>) at ././gio/gsettings.c:446
#71874 0x00007ffff456e89a in g_settings_backend_invoke_closure
(user_data=0x5555559fca00) at ././gio/gsettingsbackend.c:267
#71875 0x00007ffff3f4f725 in g_main_context_invoke_full
(context=0x5555557c2f10, priority=0, function=0x7ffff456e880
<g_settings_backend_invoke_closure>, data=0x5555559fca00, notify=0x0) at
././glib/gmain.c:5742
#71876 0x00007ffff3f4f830 in g_main_context_invoke (context=<optimized out>,
function=<optimized out>, data=<optimized out>) at ././glib/gmain.c:5703
#71877 0x00007ffff456e9a8 in g_settings_backend_dispatch_signal
(backend=0x555555863c90 [DConfSettingsBackend], function_offset=0,
name=0x5555559c4f70 "/apps/florence/window/scalex", origin_tag=0x0, names=0x0)
at ././gio/gsettingsbackend.c:322
#71878 0x00007fffe23dd344 in dconf_engine_emit_changes
(engine=engine@entry=0x555555865af0, changeset=changeset@entry=0x5555558d8610,
origin_tag=origin_tag@entry=0x0) at dconf-engine.c:977
#71879 0x00007fffe23de5a9 in dconf_engine_change_fast (engine=0x555555865af0,
changeset=changeset@entry=0x5555558d8610, origin_tag=origin_tag@entry=0x0,
error=error@entry=0x0) at dconf-engine.c:1192
#71880 0x00007fffe23dce9c in dconf_settings_backend_write
(backend=0x555555863c90 [DConfSettingsBackend], key=0x555555acc9d0
"/apps/florence/window/scalex", value=0x5555558d8670, origin_tag=0x0) at
dconfsettingsbackend.c:76
#71881 0x00007ffff456f3a4 in g_settings_backend_write (backend=0x555555863c90
[DConfSettingsBackend], key=key@entry=0x555555acc9d0
"/apps/florence/window/scalex", value=value@entry=0x5555558d8670,
origin_tag=origin_tag@entry=0x0) at ././gio/gsettingsbackend.c:783
#71882 0x00007ffff4573df3 in g_settings_write_to_backend
(settings=settings@entry=0x5555557e25c0 [GSettings],
value=value@entry=0x5555558d8670, key=<optimized out>) at
././gio/gsettings.c:1144
#71883 0x00007ffff4575265 in g_settings_set_value (settings=0x5555557e25c0
[GSettings], key=key@entry=0x555555578638 "scalex", value=0x5555558d8670) at
././gio/gsettings.c:1597
#71884 0x00007ffff4575985 in g_settings_set_double (settings=<optimized out>,
key=key@entry=0x555555578638 "scalex", value=value@entry=21) at
././gio/gsettings.c:2104
#71885 0x0000555555568a52 in settings_set_double
(item=item@entry=SETTINGS_SCALEX, value=21, b=b@entry=1) at settings.c:432
#71886 0x0000555555566301 in key_release (key=key@entry=0x5555559078c0,
status=status@entry=0x5555558a7800) at key.c:349
#71887 0x0000555555570aa1 in status_release (status=0x5555558a7800,
key=0x5555559078c0) at status.c:289
#71888 0x00005555555747b8 in fsm_process (status=status@entry=0x5555558a7800,
key=0x5555559078c0, event=event@entry=FSM_RELEASE) at fsm.c:197
#71889 0x0000555555570906 in status_pressed_set (status=0x5555558a7800,
pressed=pressed@entry=0x0) at status.c:222
#71890 0x0000555555563b4f in flo_button_release_event
(window=window@entry=0x55555590c290 [GtkWindow], event=0x5555557e5220,
user_data=0x5555558a0600) at florence.c:170
#71895 0x00007ffff4242fbf in <emit signal ??? on instance 0x55555590c290
[GtkWindow]> (instance=instance@entry=0x55555590c290, signal_id=<optimized
out>, detail=detail@entry=0) at ././gobject/gsignal.c:3447
#71891 0x00007ffff5ae6aac in _gtk_marshal_BOOLEAN__BOXED
(closure=0x5555558f1fc0, return_value=0x7fffffffe5e0, n_param_values=<optimized
out>, param_values=0x7fffffffe640, invocation_hint=<optimized out>,
marshal_data=<optimized out>) at ././gtk/gtkmarshalers.c:86
#71892 0x00007ffff4227f75 in g_closure_invoke (closure=0x5555558f1fc0,
return_value=return_value@entry=0x7fffffffe5e0, n_param_values=2,
param_values=param_values@entry=0x7fffffffe640,
invocation_hint=invocation_hint@entry=0x7fffffffe5c0)
at ././gobject/gclosure.c:804
#71893 0x00007ffff4239f82 in signal_emit_unlocked_R
(node=node@entry=0x555555852640, detail=detail@entry=0,
instance=instance@entry=0x55555590c290,
emission_return=emission_return@entry=0x7fffffffe750,
instance_and_params=instance_and_params@entry=0x7fffffffe640)
at ././gobject/gsignal.c:3635
#71894 0x00007ffff424267f in g_signal_emit_valist (instance=<optimized
out>, signal_id=<optimized out>, detail=<optimized out>,
var_args=var_args@entry=0x7fffffffe800) at ././gobject/gsignal.c:3401
#71896 0x00007ffff5c3357c in gtk_widget_event_internal (widget=0x55555590c290
[GtkWindow], event=0x5555557e5220) at ././gtk/gtkwidget.c:7724
#71897 0x00007ffff5c53fb3 in _gtk_window_check_handle_wm_event
(event=event@entry=0x5555557e5220) at ././gtk/gtkwindow.c:8135
#71898 0x00007ffff5ae58c1 in gtk_main_do_event (event=0x5555557e5220) at
././gtk/gtkmain.c:1748
#71899 0x00007ffff55f6e15 in _gdk_event_emit (event=event@entry=0x5555557e5220)
at ././gdk/gdkevents.c:73
#71900 0x00007ffff5627ea2 in gdk_event_source_dispatch (source=<optimized out>,
callback=<optimized out>, user_data=<optimized out>) at
././gdk/x11/gdkeventsource.c:367
#71901 0x00007ffff3f4e7f7 in g_main_dispatch (context=0x5555557c2f10) at
././glib/gmain.c:3203
#71902 0x00007ffff3f4e7f7 in g_main_context_dispatch
(context=context@entry=0x5555557c2f10) at ././glib/gmain.c:3856
#71903 0x00007ffff3f4ea60 in g_main_context_iterate (context=0x5555557c2f10,
block=block@entry=1, dispatch=dispatch@entry=1, self=<optimized out>) at
././glib/gmain.c:3929
#71904 0x00007ffff3f4ed82 in g_main_loop_run (loop=0x555555aed7b0) at
././glib/gmain.c:4125
#71905 0x00007ffff5ae4d55 in gtk_main () at ././gtk/gtkmain.c:1312
#71906 0x0000555555563298 in main (argc=<optimized out>, argv=<optimized out>)
at main.c:139
(gdb)
The crash happens the same way if "dbus-launch" (dbus-x11) is installed.
From 916c918aece83a7e5d91b83b8c430a8533dcaf3f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bernhard=20=C3=9Cbelacker?= <[email protected]>
Date: Tue, 9 May 2017 22:52:51 +0200
Subject: Avoid execution of function body if we are already executing it.
https://bugs.debian.org/805895
---
src/view.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/src/view.c b/src/view.c
index a001669..a05c954 100644
--- a/src/view.c
+++ b/src/view.c
@@ -722,9 +722,20 @@ void view_update_extensions(GSettings *settings, gchar *key, gpointer user_data)
END_FUNC
}
+#define START_ONCE_ACTIVE \
+ static int running; \
+ if (!running) \
+ running = TRUE; \
+ else \
+ return;
+
+#define END_ONCE_ACTIVE \
+ running = FALSE;
+
/* Triggered by gconf when the "zoom" parameter is changed. */
void view_set_scalex(GSettings *settings, gchar *key, gpointer user_data)
{
+ START_ONCE_ACTIVE
START_FUNC
struct view *view=(struct view *)user_data;
/* Do not call configure signal handler */
@@ -734,11 +745,13 @@ void view_set_scalex(GSettings *settings, gchar *key, gpointer user_data)
if (settings_get_bool(SETTINGS_KEEP_RATIO)) view->scaley=view->scalex;
view_update_extensions(settings, key, user_data);
END_FUNC
+ END_ONCE_ACTIVE
}
/* Triggered by gconf when the "zoom" parameter is changed. */
void view_set_scaley(GSettings *settings, gchar *key, gpointer user_data)
{
+ START_ONCE_ACTIVE
START_FUNC
struct view *view=(struct view *)user_data;
/* Do not call configure signal handler */
@@ -748,6 +761,7 @@ void view_set_scaley(GSettings *settings, gchar *key, gpointer user_data)
if (settings_get_bool(SETTINGS_KEEP_RATIO)) view->scalex=view->scaley;
view_update_extensions(settings, key, user_data);
END_FUNC
+ END_ONCE_ACTIVE
}
/* Triggered by gconf when the "opacity" parameter is changed. */
--
2.11.0