sorry for being late to the party, but on OpenBSD it's more or less the same as @madpilot said for FreeBSD, we need -L/usr/local/lib -lintl
in LDFLAGS
to have bind_textdomain_codeset()
found by configure, as it is without anything in the build env it's not found:
checking for bind_textdomain_codeset... no
checking for bind_textdomain_codeset... (cached) no
so whatever is merged in !41 (merged) should be good for us too :)
on OpenBSD, using 4.18.0, xfwm crashes sometimes when alt-tabbing, and the backtrace points at https://gitlab.xfce.org/xfce/xfwm4/-/blob/master/src/tabwin.c#L998, so maybe a null deref ?
(gdb) core xfwm4.core
[New process 441345]
[New process 573830]
[New process 416271]
[New process 393628]
Core was generated by `xfwm4'.
Program terminated with signal SIGSEGV, Segmentation fault.
#0 tabwinRemoveClient (tabwin=0xea976b5db40, c=0xea9acf58700) at tabwin.c:998
998 tabwin.c: No such file or directory.
[Current thread is 1 (process 441345)]
(gdb) bt
#0 tabwinRemoveClient (tabwin=0xea976b5db40, c=0xea9acf58700) at tabwin.c:998
#1 0x00000ea71d9d1322 in clientCycleEventFilter (event=0xea971291840, data=0x73655dd23db0) at cycle.c:429
#2 0x00000ea71d9d3ce6 in eventXfwmFilter (gdk_xevent=<optimized out>, gevent=<optimized out>, data=<optimized out>) at event_filter.c:175
#3 0x00000ea9de9e05df in _gdk_x11_display_queue_events () from /usr/local/lib/libgdk-3.so.2201.1
#4 0x00000ea9de980d08 in gdk_display_get_event () from /usr/local/lib/libgdk-3.so.2201.1
#5 0x00000ea9de9e0c78 in gdk_event_source_dispatch () from /usr/local/lib/libgdk-3.so.2201.1
#6 0x00000eaa10e0020d in g_main_context_dispatch_unlocked () from /usr/local/lib/libglib-2.0.so.4201.11
#7 0x00000eaa10e005ec in g_main_context_iterate_unlocked () from /usr/local/lib/libglib-2.0.so.4201.11
#8 0x00000eaa10e009fa in g_main_loop_run () from /usr/local/lib/libglib-2.0.so.4201.11
#9 0x00000ea920da74bb in gtk_main () from /usr/local/lib/libgtk-3.so.2201.0
#10 0x00000ea71d9d0f79 in clientCycle (c=<optimized out>, event=0xea971278420) at cycle.c:536
#11 0x00000ea71d9d4719 in handleKeyPress (display_info=0xea9e8833a00, event=0xea971278420) at events.c:329
#12 handleEvent (display_info=0xea9e8833a00, event=0xea971278420) at events.c:2181
#13 xfwm4_event_filter (event=0xea971278420, data=0xea9e8833a00) at events.c:2302
#14 0x00000ea71d9d3ce6 in eventXfwmFilter (gdk_xevent=<optimized out>, gevent=<optimized out>, data=<optimized out>) at event_filter.c:175
#15 0x00000ea9de9e05df in _gdk_x11_display_queue_events () from /usr/local/lib/libgdk-3.so.2201.1
#16 0x00000ea9de980d08 in gdk_display_get_event () from /usr/local/lib/libgdk-3.so.2201.1
#17 0x00000ea9de9e0c78 in gdk_event_source_dispatch () from /usr/local/lib/libgdk-3.so.2201.1
#18 0x00000eaa10e0020d in g_main_context_dispatch_unlocked () from /usr/local/lib/libglib-2.0.so.4201.11
#19 0x00000eaa10e005ec in g_main_context_iterate_unlocked () from /usr/local/lib/libglib-2.0.so.4201.11
#20 0x00000eaa10e009fa in g_main_loop_run () from /usr/local/lib/libglib-2.0.so.4201.11
#21 0x00000ea920da74bb in gtk_main () from /usr/local/lib/libgtk-3.so.2201.0
#22 0x00000ea71d9e3495 in main (argc=1, argv=0x73655dd24758) at main.c:764
the first one works !
now i'm suspecting 34d1f452
interestingly, 2.8.0 doesn't crash.
on openbsd (which has stronger memory corruption constraints) using 2.8.1, the panel plugin crashes at the first letter entered in the search field, traceback below:
Program terminated with signal SIGSEGV, Segmentation fault.
#0 memmove () at /usr/src/lib/libc/arch/amd64/string/memmove.S:67
67 rep
[Current thread is 1 (process 353577)]
#0 memmove () at /usr/src/lib/libc/arch/amd64/string/memmove.S:67
#1 0x000007d290996b36 in std::__1::__move<WhiskerMenu::Launcher*, WhiskerMenu::Launcher*> (__first=<optimized out>, __result=0x7d272f9d4a0, __last=<optimized out>)
at /usr/include/c++/v1/__algorithm/move.h:60
#2 std::__1::move<std::__1::__wrap_iter<WhiskerMenu::Launcher**>, std::__1::__wrap_iter<WhiskerMenu::Launcher**> > (__first=..., __result=..., __last=...)
at /usr/include/c++/v1/__algorithm/move.h:73
#3 std::__1::__rotate_left<std::__1::__wrap_iter<WhiskerMenu::Launcher**> > (__first=..., __last=...) at /usr/include/c++/v1/__algorithm/rotate.h:37
#4 std::__1::__rotate<std::__1::__wrap_iter<WhiskerMenu::Launcher**> > (__first=..., __middle=..., __last=...) at /usr/include/c++/v1/__algorithm/rotate.h:180
#5 std::__1::rotate<std::__1::__wrap_iter<WhiskerMenu::Launcher**> > (__first=..., __middle=..., __last=...) at /usr/include/c++/v1/__algorithm/rotate.h:197
#6 WhiskerMenu::SearchPage::move_launcher (this=0x7d2528bfd00, desktop_id=..., pos=<optimized out>)
at /usr/obj/ports/xfce4-whiskermenu-2.8.1/xfce4-whiskermenu-plugin-2.8.1/panel-plugin/search-page.cpp:196
#7 0x000007d2909968cd in WhiskerMenu::SearchPage::update_search_order (this=0x7d2528bfd00)
at /usr/obj/ports/xfce4-whiskermenu-2.8.1/xfce4-whiskermenu-plugin-2.8.1/panel-plugin/search-page.cpp:221
#8 0x000007d290995e84 in WhiskerMenu::SearchPage::set_filter (this=0x7d2528bfd00, filter=0x7d272f66e50 "w")
at /usr/obj/ports/xfce4-whiskermenu-2.8.1/xfce4-whiskermenu-plugin-2.8.1/panel-plugin/search-page.cpp:94
#9 0x000007d1dd94b46b in g_closure_invoke () from /usr/local/lib/libgobject-2.0.so.4200.18
will have a look at the recent commits to search-page.cpp
to figure out what went wrong.
i saw the move
fwiw, i know the MR has been merged, but on OpenBSD there's no such thing as 'linprocfs' expected in https://gitlab.xfce.org/apps/xfce4-terminal/-/blob/master/terminal/terminal-util.c#L228
and i'm not sure there's a way (similar to what was done here) to get the $CWD of a given arbitrary PID.
sometimes i can kill the process and rerun an instance of the server from an xterm, but sometimes it's not possible anymore, eg starting xfce4-terminal
stays waiting. Using ktrace i see it's trying to send dbus messages.
and at that point my only option is to kill the complete session and restart it to get a working terminal.
when the terminal process is stuck, leaving a dbus-monitor
process running in an xterm, i still see periodic dbus messages coming from xfce4-terminal
:
method call time=1695821689.599602 sender=:1.41 -> destination=:1.3 serial=29794 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
string "xfce4-terminal"
string "/shortcuts-no-menukey"
method call time=1695821714.612352 sender=:1.41 -> destination=:1.3 serial=29795 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
string "xfce4-terminal"
string "/color-palette"
method call time=1695821739.619166 sender=:1.41 -> destination=:1.3 serial=29796 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
string "xfce4-terminal"
string "/color-cursor-use-default"
method call time=1695821764.629143 sender=:1.41 -> destination=:1.3 serial=29797 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
string "xfce4-terminal"
string "/color-selection-use-default"
method call time=1695821789.639079 sender=:1.41 -> destination=:1.3 serial=29798 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
string "xfce4-terminal"
string "/color-bold-use-default"
method call time=1695821814.649005 sender=:1.41 -> destination=:1.3 serial=29799 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
string "xfce4-terminal"
string "/color-background-vary"
method call time=1695821839.659124 sender=:1.41 -> destination=:1.3 serial=29800 path=/org/xfce/Xfconf; interface=org.xfce.Xfconf; member=GetProperty
string "xfce4-terminal"
string "/color-bold-is-bright"
so a thread is still running but the main thread is stuck somewhere ?
I'm surprised you don't have the same kind of problem with Thunar for example...
i dont use it that much.. but will check what happens with it.
another trace of a hung term:
(gdb) bt
#0 futex () at /tmp/-:3
#1 0xa947dab4a67b697a in ?? ()
#2 0x00000fd595ebc0f2 in _twait (p=0xfd5532fb860, val=2, clockid=0, abs=0x0) at /usr/src/lib/libc/thread/synch.h:36
#3 0x00000fd595ebbe8b in _rthread_mutex_timedlock (mutexp=<optimized out>, trywait=0, abs=0x0, timed=<optimized out>) at /usr/src/lib/libc/thread/rthread_mutex.c:192
#4 0x00000fd4e4052d8a in g_mutex_lock () from /usr/local/lib/libglib-2.0.so.4201.10
#5 0x00000fd519e797d0 in g_dbus_connection_send_message_with_reply () from /usr/local/lib/libgio-2.0.so.4200.17
#6 0x00000fd519e79d04 in g_dbus_connection_send_message_with_reply_sync () from /usr/local/lib/libgio-2.0.so.4200.17
#7 0x00000fd519e7d308 in g_dbus_connection_call_sync_internal () from /usr/local/lib/libgio-2.0.so.4200.17
#8 0x00000fd519e8e748 in g_dbus_proxy_call_sync_internal () from /usr/local/lib/libgio-2.0.so.4200.17
#9 0x00000fd519e8e42b in g_dbus_proxy_call_sync () from /usr/local/lib/libgio-2.0.so.4200.17
#10 0x00000fd4d0cfad09 in xfconf_exported_call_get_property_sync () from /usr/local/lib/libxfconf-0.so.1.0
#11 0x00000fd4d0cf1e92 in xfconf_cache_lookup_locked () from /usr/local/lib/libxfconf-0.so.1.0
#12 0x00000fd4d0cf1e02 in xfconf_cache_lookup () from /usr/local/lib/libxfconf-0.so.1.0
#13 0x00000fd4d0cf3839 in xfconf_channel_get_internal () from /usr/local/lib/libxfconf-0.so.1.0
#14 0x00000fd4d0cf4bff in xfconf_channel_get_property () from /usr/local/lib/libxfconf-0.so.1.0
#15 0x00000fd2a102e137 in terminal_preferences_get_property (object=0xfd553305820, prop_id=<optimized out>, value=0x75950d15d910, pspec=0xfd553302980)
at terminal-preferences.c:1339
#16 0x00000fd5335aec3b in g_object_get_valist () from /usr/local/lib/libgobject-2.0.so.4200.17
#17 0x00000fd5335af11d in g_object_get () from /usr/local/lib/libgobject-2.0.so.4200.17
#18 0x00000fd2a102c992 in terminal_preferences_get_color (preferences=0xfd5532fb860, property=0x81 <error: Cannot access memory at address 0x81>, color_return=0x75950d15daa0)
at terminal-preferences.c:1601
#19 0x00000fd2a1039e0a in terminal_screen_vte_window_contents_changed (screen=0xfd5404b9b30) at terminal-screen.c:1674
#20 0x00000fd5335a5e94 in _g_closure_invoke_va () from /usr/local/lib/libgobject-2.0.so.4200.17
#21 0x00000fd5335c0fa1 in g_signal_emit_valist () from /usr/local/lib/libgobject-2.0.so.4200.17
#22 0x00000fd5335c1a15 in g_signal_emit () from /usr/local/lib/libgobject-2.0.so.4200.17
#23 0x00000fd4fc68adcc in vte::terminal::Terminal::emit_pending_signals() () from /usr/local/lib/libvte-2.91.so.2.8
#24 0x00000fd4fc6886e5 in vte::terminal::Terminal::process_incoming() () from /usr/local/lib/libvte-2.91.so.2.8
#25 0x00000fd4fc69a6e6 in vte::terminal::Terminal::process(bool) () from /usr/local/lib/libvte-2.91.so.2.8
#26 0x00000fd4fc69bad8 in vte::terminal::process_timeout(void*) () from /usr/local/lib/libvte-2.91.so.2.8
#27 0x00000fd4e3fe65d2 in g_timeout_dispatch () from /usr/local/lib/libglib-2.0.so.4201.10
#28 0x00000fd4e3feb3ef in g_main_context_dispatch () from /usr/local/lib/libglib-2.0.so.4201.10
#29 0x00000fd4e3feb757 in g_main_context_iterate () from /usr/local/lib/libglib-2.0.so.4201.10
#30 0x00000fd4e3febb6a in g_main_loop_run () from /usr/local/lib/libglib-2.0.so.4201.10
#31 0x00000fd4da9d21ec in gtk_main () from /usr/local/lib/libgtk-3.so.2201.0
#32 0x00000fd2a1027b60 in main (argc=<optimized out>, argv=<optimized out>) at main.c:360
fwiw im seeing this is with glib 2.76.4 on OpenBSD so not glibc :)
after attaching to the running process and gathering those traces, then 'continuing' all the threads:
759 terminal-widget.c: No such file or directory.
(gdb) p *event
$4 = {type = GDK_KEY_PRESS, window = 0x4dd5fe348c0, send_event = 0 '\000', time = 1730548, state = 16, keyval = 114, length = 1, string = 0x4de07660210 "r", hardware_keycode = 27,
group = 0 '\000', is_modifier = 0}
(gdb) c
Continuing.
Thread 2 received signal SIGSTOP, Stopped (signal).
[Switching to thread 144606 of process 14069]
futex () at /tmp/-:3
3 /tmp/-: No such file or directory.
(gdb) c
Continuing.
Thread 3 received signal SIGSTOP, Stopped (signal).
[Switching to thread 212910 of process 14069]
_thread_sys_poll () at /tmp/-:3
3 /tmp/-: No such file or directory.
(gdb) c
Continuing.
Thread 2 received signal SIGSTOP, Stopped (signal).
[Switching to thread 144606 of process 14069]
futex () at /tmp/-:3
3 /tmp/-: No such file or directory.
(gdb)
Continuing.
Thread 4 received signal SIGSTOP, Stopped (signal).
[Switching to thread 295377 of process 14069]
_thread_sys_poll () at /tmp/-:3
3 /tmp/-: No such file or directory.
(gdb)
Continuing.
normal activity in the terminal window resumes and i can retype commands. so something calls into dbus and attaching with egdb unblocked it ?
with 1.1.0 on OpenBSD, sometimes the terminal just 'hangs':
attaching to the running process with gdb, i get this trace which seems to show that a keypress event triggered a write to xfconf that doesnt return ?
(gdb) bt
#0 _thread_sys_poll () at /tmp/-:3
#1 0x017a75f5e4cb2c14 in ?? ()
#2 0x000004dd44823e72 in _libc_poll_cancel (fds=0x4dd5fe4fc70, nfds=1, timeout=25000) at /usr/src/lib/libc/sys/w_poll.c:27
#3 0x000004ddd11c0702 in g_main_context_iterate () from /usr/local/lib/libglib-2.0.so.4201.10
#4 0x000004ddd11c0b6a in g_main_loop_run () from /usr/local/lib/libglib-2.0.so.4201.10
#5 0x000004dd550cdd11 in g_dbus_connection_send_message_with_reply_sync () from /usr/local/lib/libgio-2.0.so.4200.17
#6 0x000004dd550d1308 in g_dbus_connection_call_sync_internal () from /usr/local/lib/libgio-2.0.so.4200.17
#7 0x000004dd550e2748 in g_dbus_proxy_call_sync_internal () from /usr/local/lib/libgio-2.0.so.4200.17
#8 0x000004dd550e242b in g_dbus_proxy_call_sync () from /usr/local/lib/libgio-2.0.so.4200.17
#9 0x000004ddd1a96d09 in xfconf_exported_call_get_property_sync () from /usr/local/lib/libxfconf-0.so.1.0
#10 0x000004ddd1a8de92 in xfconf_cache_lookup_locked () from /usr/local/lib/libxfconf-0.so.1.0
#11 0x000004ddd1a8de02 in xfconf_cache_lookup () from /usr/local/lib/libxfconf-0.so.1.0
#12 0x000004ddd1a8f839 in xfconf_channel_get_internal () from /usr/local/lib/libxfconf-0.so.1.0
#13 0x000004ddd1a90bff in xfconf_channel_get_property () from /usr/local/lib/libxfconf-0.so.1.0
#14 0x000004db315cd137 in terminal_preferences_get_property (object=0x4dd769997c0, prop_id=<optimized out>, value=0x7708eb3292e0, pspec=0x4dd7698f480) at terminal-preferences.c:1339
#15 0x000004dde98c5c3b in g_object_get_valist () from /usr/local/lib/libgobject-2.0.so.4200.17
#16 0x000004dde98c611d in g_object_get () from /usr/local/lib/libgobject-2.0.so.4200.17
#17 0x000004db315da2b8 in terminal_widget_key_press_event (widget=0x4dd78dab880, event=0x4ddf8a21c80) at terminal-widget.c:759
#18 0x000004dd72e04bc5 in _gtk_marshal_BOOLEAN__BOXEDv () from /usr/local/lib/libgtk-3.so.2201.0
#19 0x000004dde98bceea in _g_closure_invoke_va () from /usr/local/lib/libgobject-2.0.so.4200.17
#20 0x000004dde98d7fa1 in g_signal_emit_valist () from /usr/local/lib/libgobject-2.0.so.4200.17
#21 0x000004dde98d8a15 in g_signal_emit () from /usr/local/lib/libgobject-2.0.so.4200.17
#22 0x000004dd7312d5d9 in gtk_widget_event_internal () from /usr/local/lib/libgtk-3.so.2201.0
#23 0x000004dd7314b104 in gtk_window_propagate_key_event () from /usr/local/lib/libgtk-3.so.2201.0
#24 0x000004dd731536a4 in gtk_window_key_press_event () from /usr/local/lib/libgtk-3.so.2201.0
#25 0x000004dd72e04bc5 in _gtk_marshal_BOOLEAN__BOXEDv () from /usr/local/lib/libgtk-3.so.2201.0
#26 0x000004dde98bce94 in _g_closure_invoke_va () from /usr/local/lib/libgobject-2.0.so.4200.17
#27 0x000004dde98d7fa1 in g_signal_emit_valist () from /usr/local/lib/libgobject-2.0.so.4200.17
#28 0x000004dde98d8a15 in g_signal_emit () from /usr/local/lib/libgobject-2.0.so.4200.17
#29 0x000004dd7312d5d9 in gtk_widget_event_internal () from /usr/local/lib/libgtk-3.so.2201.0
#30 0x000004dd72fa9e8f in gtk_propagate_event () from /usr/local/lib/libgtk-3.so.2201.0
#31 0x000004dd72fa9a02 in gtk_main_do_event () from /usr/local/lib/libgtk-3.so.2201.0
#32 0x000004ddbaf3cc1b in _gdk_event_emit () from /usr/local/lib/libgdk-3.so.2201.1
#33 0x000004ddbaf76148 in gdk_event_source_dispatch () from /usr/local/lib/libgdk-3.so.2201.1
#34 0x000004ddd11c03ef in g_main_context_dispatch () from /usr/local/lib/libglib-2.0.so.4201.10
#35 0x000004ddd11c0757 in g_main_context_iterate () from /usr/local/lib/libglib-2.0.so.4201.10
#36 0x000004ddd11c0b6a in g_main_loop_run () from /usr/local/lib/libglib-2.0.so.4201.10
#37 0x000004dd72fa91ec in gtk_main () from /usr/local/lib/libgtk-3.so.2201.0
#38 0x000004db315c6b60 in main (argc=<optimized out>, argv=<optimized out>) at main.c:360
i havent figured out yet what exact key sequence triggers this.. but here are some details from the various frames:
#14 0x000004db315cd137 in terminal_preferences_get_property (object=0x4dd769997c0, prop_id=<optimized out>, value=0x7708eb3292e0, pspec=0x4dd7698f480) at terminal-preferences.c:1339
1339 terminal-preferences.c: No such file or directory.
(gdb) p value
$1 = (GValue *) 0x7708eb3292e0
(gdb) p *value
$2 = {g_type = 20, 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}}}
(gdb) p *pspec
$3 = {g_type_instance = {g_class = 0x4dd80c2f7d0}, name = 0x4db315bfb3b "shortcuts-no-menukey", flags = 227, value_type = 20, owner_type = 5349224045184, _nick = 0x0,
_blurb = 0x4db315ba752 "ShortcutsNoMenukey", qdata = 0x0, ref_count = 2, param_id = 82}
...
#17 0x000004db315da2b8 in terminal_widget_key_press_event (widget=0x4dd78dab880, event=0x4ddf8a21c80) at terminal-widget.c:759
759 terminal-widget.c: No such file or directory.
(gdb) p *event
$4 = {type = GDK_KEY_PRESS, window = 0x4dd5fe348c0, send_event = 0 '\000', time = 1730548, state = 16, keyval = 114, length = 1, string = 0x4de07660210 "r", hardware_keycode = 27,
group = 0 '\000', is_modifier = 0}
added in 1d56462b, but that ability might soon be removed, only leaving us with the ability to shutdown via ckit2/polkit (or manual launchers with doas halt -p
)
if that move is made, i'll make sure to make it return false
in https://gitlab.xfce.org/xfce/xfce4-session/-/blob/master/xfce4-session/xfsm-shutdown-fallback.c#L273
Landry Breuil (73f8f995) at 01 May 11:19
restore changelog history dropped in ca817cd2
On OpenBSD/amd64 7.2-current the xfce4-mixer-4.18.0pre0
package corresponds to latest HEAD (a7195103
) using only the sndio backend.
In the xfce4-mixer
GUI (not the tray plugin), sliding down any volume control down to zero results in it being stuck there, i.e. it cannot be moved to anything non-zero.
sndioctl(1) confirms that the value is set to zero.
Setting it on the command line, .e.g. sndioctl output.level=1
, while the GUI remains open fixes this.
Closing and opening the GUI again without doing anything else makes it possible to change the level again through the GUI.
Can anyone else on OpenBSD with sndio(7) reproduce this? Can anyone else on not-OpenBSD (with not-sndiod) reproduce this?
Mentioning @landry since he implemented this backend.
Landry Breuil (f8634e27) at 26 Apr 18:31
[sndio] make sure to save a non-zero volume when setting mute (fixe...
I've finally had time to analyse this issue, and it's a bit stupid. When we reach gst_mixer_sndio_set_mute
in https://gitlab.xfce.org/apps/xfce4-mixer/-/blob/master/libxfce4mixer/sndio/sndio-mixer.c#L243 the volume has been lowered to 0 in the UI, so when we save it to restore it later on when unmuting, we re-set it to 0, which sets it again to mute, etc etc etc..
quickly restoring a hardcoded 1 instead of the saved volume "unstucks" the slider but that's not a proper fix. Maybe i'll just save the volume only if it's different from 0. Testing ...