sway

i3-compatible Wayland compositor
git clone https://git.awy.one/sway
Log | Files | Refs | README | LICENSE

commit 51c077798cf06ebd5e27271fb5e276c181f8a077
parent 32087ad77d393c24360d3210b89b9a85886a8698
Author: Brian Ashworth <bosrsf04@gmail.com>
Date:   Fri,  3 May 2019 23:26:18 -0400

Destroy swaybg client on reload

When reloading, this destroys the old config's swaybg client before
spawning the new config's swaybg. This fixes a race condition where the
old config's swaybg client's destroy was being called after the new
config's swaybg client was being spawned. This was causing the
reference to the new swaybg client to be removed and never destroyed.

This also modifies handle_swaybg_client_destroy to grab the config
reference using wl_container_of on the listener since the swaybg client
may be the old config swaybg client and should be used instead of the
global config instance

Diffstat:
Msway/config.c | 4++++
Msway/config/output.c | 8+++++---
2 files changed, 9 insertions(+), 3 deletions(-)

diff --git a/sway/config.c b/sway/config.c @@ -441,6 +441,10 @@ bool load_main_config(const char *file, bool is_active, bool validating) { config->reloading = true; config->active = true; + if (old_config->swaybg_client != NULL) { + wl_client_destroy(old_config->swaybg_client); + } + if (old_config->swaynag_config_errors.client != NULL) { wl_client_destroy(old_config->swaynag_config_errors.client); } diff --git a/sway/config/output.c b/sway/config/output.c @@ -482,9 +482,11 @@ void free_output_config(struct output_config *oc) { static void handle_swaybg_client_destroy(struct wl_listener *listener, void *data) { - wl_list_remove(&config->swaybg_client_destroy.link); - wl_list_init(&config->swaybg_client_destroy.link); - config->swaybg_client = NULL; + struct sway_config *sway_config = + wl_container_of(listener, sway_config, swaybg_client_destroy); + wl_list_remove(&sway_config->swaybg_client_destroy.link); + wl_list_init(&sway_config->swaybg_client_destroy.link); + sway_config->swaybg_client = NULL; } static bool _spawn_swaybg(char **command) {