summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Mikkel Oscar Lyderik <mikkeloscar@gmail.com>2015-12-18 18:02:39 +0100
committerLibravatar Mikkel Oscar Lyderik <mikkeloscar@gmail.com>2015-12-18 18:27:54 +0100
commit90ff36cab8657272b6727af69bab49dba463d6ba (patch)
tree683793bfcd1cd3a5a53fa27883abde31d71ac09c
parentReload swaybar/swaybg on config reload. (diff)
downloadsway-90ff36cab8657272b6727af69bab49dba463d6ba.tar.gz
sway-90ff36cab8657272b6727af69bab49dba463d6ba.tar.zst
sway-90ff36cab8657272b6727af69bab49dba463d6ba.zip
Terminate children when freeing output container
-rw-r--r--include/config.h2
-rw-r--r--sway/config.c20
-rw-r--r--sway/container.c4
3 files changed, 18 insertions, 8 deletions
diff --git a/include/config.h b/include/config.h
index 1f25a0cd..b89ad553 100644
--- a/include/config.h
+++ b/include/config.h
@@ -185,6 +185,8 @@ int sway_mouse_binding_cmp_buttons(const void *a, const void *b);
185void free_sway_mouse_binding(struct sway_mouse_binding *smb); 185void free_sway_mouse_binding(struct sway_mouse_binding *smb);
186 186
187void load_swaybars(swayc_t *output, int output_idx); 187void load_swaybars(swayc_t *output, int output_idx);
188void terminate_swaybars(list_t *pids);
189void terminate_swaybg(pid_t pid);
188 190
189/** 191/**
190 * Allocate and initialize default bar configuration. 192 * Allocate and initialize default bar configuration.
diff --git a/sway/config.c b/sway/config.c
index 23fe5388..928d35a8 100644
--- a/sway/config.c
+++ b/sway/config.c
@@ -389,7 +389,7 @@ static void invoke_swaybar(swayc_t *output, struct bar_config *bar, int output_i
389 list_add(output->bar_pids, pid); 389 list_add(output->bar_pids, pid);
390} 390}
391 391
392static void terminate_swaybars(list_t *pids) { 392void terminate_swaybars(list_t *pids) {
393 int i, ret; 393 int i, ret;
394 pid_t *pid; 394 pid_t *pid;
395 for (i = 0; i < pids->length; ++i) { 395 for (i = 0; i < pids->length; ++i) {
@@ -411,6 +411,16 @@ static void terminate_swaybars(list_t *pids) {
411 } 411 }
412} 412}
413 413
414void terminate_swaybg(pid_t pid) {
415 int ret = kill(pid, SIGTERM);
416 if (ret != 0) {
417 sway_log(L_ERROR, "Unable to terminate swaybg [pid: %d]", pid);
418 } else {
419 int status;
420 waitpid(pid, &status, 0);
421 }
422}
423
414void load_swaybars(swayc_t *output, int output_idx) { 424void load_swaybars(swayc_t *output, int output_idx) {
415 // Check for bars 425 // Check for bars
416 list_t *bars = create_list(); 426 list_t *bars = create_list();
@@ -496,13 +506,7 @@ void apply_output_config(struct output_config *oc, swayc_t *output) {
496 if (oc && oc->background) { 506 if (oc && oc->background) {
497 507
498 if (output->bg_pid != 0) { 508 if (output->bg_pid != 0) {
499 int ret = kill(output->bg_pid, SIGTERM); 509 terminate_swaybg(output->bg_pid);
500 if (ret != 0) {
501 sway_log(L_ERROR, "Unable to terminate swaybg [pid: %d]", output->bg_pid);
502 } else {
503 int status;
504 waitpid(output->bg_pid, &status, 0);
505 }
506 } 510 }
507 511
508 sway_log(L_DEBUG, "Setting background for output %d to %s", output_i, oc->background); 512 sway_log(L_DEBUG, "Setting background for output %d to %s", output_i, oc->background);
diff --git a/sway/container.c b/sway/container.c
index 395eb04d..b85d2114 100644
--- a/sway/container.c
+++ b/sway/container.c
@@ -61,8 +61,12 @@ static void free_swayc(swayc_t *cont) {
61 free(cont->app_id); 61 free(cont->app_id);
62 } 62 }
63 if (cont->bar_pids) { 63 if (cont->bar_pids) {
64 terminate_swaybars(cont->bar_pids);
64 free_flat_list(cont->bar_pids); 65 free_flat_list(cont->bar_pids);
65 } 66 }
67 if (cont->bg_pid != 0) {
68 terminate_swaybg(cont->bg_pid);
69 }
66 free(cont); 70 free(cont);
67} 71}
68 72