The segfaults were happening on GTK icon theme functions, which are
called via the C++ interface functions such as Gtk::IconTheme::has_icon.
There are multiple modules and threads using this functions on the default
icon theme by calling Gtk::IconTheme::get_default(), which returns the same
object for all callers, and was causing concurrent access to the same internal
data structures on the GTK lib. Even a seemingly read-only function such as
has_icon can cause writes due to the internal icon cache being updated.
To avoid this issues, a program wide global mutex must be used to ensure
a single thread is accessing the default icon theme instance.
This commit implements wrappers for the existing IconTheme function calls,
ensuring the global lock is held while calling the underling GTK functions.
The option is generally useful when scrolling is used, when configuring
input devices to use "natural scroll direction".
Both backlight and pulseaudio were using different implementations, this
unifies and documents them.
Signed-off-by: Robert Günzler <r@gnzler.io>
In waybar::modules::Battery::~Battery(), store a copy of the batteries_
iterator before calling erase(), as erase() invalidates the iterator.
Prior to this change, disconnecting outputs resulted in a SEGFAULT when
using the battery module; e.g.,
[debug] Received SIGCHLD in signalThread
[debug] Cmd exited with code 0
[debug] Received SIGCHLD in signalThread
[debug] Cmd exited with code 0
[debug] Received SIGCHLD in signalThread
[debug] Cmd exited with code 0
[debug] Output removed: AU Optronics 0x2336
[info] Bar configured (width: 1280, height: 25) for output: eDP-1
[info] Bar configured (width: 1280, height: 25) for output: eDP-1
zsh: segmentation fault (core dumped) ./build/waybar -l trace
Signed-off-by: Lukas Fleischer <lfleischer@lfos.de>