diff options
author | Ian Fan <ianfan0@gmail.com> | 2019-02-14 15:43:34 +0000 |
---|---|---|
committer | Ian Fan <ianfan0@gmail.com> | 2019-02-15 14:09:14 +0000 |
commit | 5484f308b9aa53ab9c13d670d84a7fc35d447c1a (patch) | |
tree | ea3d270c931178a43eb8e28657808c84570b3ef2 /swaybar/bar.c | |
parent | apply_output_config: dpms on before modeset (diff) | |
download | sway-5484f308b9aa53ab9c13d670d84a7fc35d447c1a.tar.gz sway-5484f308b9aa53ab9c13d670d84a7fc35d447c1a.tar.zst sway-5484f308b9aa53ab9c13d670d84a7fc35d447c1a.zip |
swaybar: prevent signal handler from firing during termination
This prevents a heap-use-after-free crash when sway terminates.
Diffstat (limited to 'swaybar/bar.c')
-rw-r--r-- | swaybar/bar.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/swaybar/bar.c b/swaybar/bar.c index a1f7bfdb..db1c1222 100644 --- a/swaybar/bar.c +++ b/swaybar/bar.c | |||
@@ -4,6 +4,7 @@ | |||
4 | #include <fcntl.h> | 4 | #include <fcntl.h> |
5 | #include <poll.h> | 5 | #include <poll.h> |
6 | #include <signal.h> | 6 | #include <signal.h> |
7 | #include <stdbool.h> | ||
7 | #include <stdlib.h> | 8 | #include <stdlib.h> |
8 | #include <string.h> | 9 | #include <string.h> |
9 | #include <sys/wait.h> | 10 | #include <sys/wait.h> |
@@ -403,8 +404,7 @@ bool bar_setup(struct swaybar *bar, const char *socket_path) { | |||
403 | static void display_in(int fd, short mask, void *data) { | 404 | static void display_in(int fd, short mask, void *data) { |
404 | struct swaybar *bar = data; | 405 | struct swaybar *bar = data; |
405 | if (wl_display_dispatch(bar->display) == -1) { | 406 | if (wl_display_dispatch(bar->display) == -1) { |
406 | bar_teardown(bar); | 407 | bar->running = false; |
407 | exit(0); | ||
408 | } | 408 | } |
409 | } | 409 | } |
410 | 410 | ||
@@ -439,7 +439,7 @@ void bar_run(struct swaybar *bar) { | |||
439 | loop_add_fd(bar->eventloop, bar->tray->fd, POLLIN, tray_in, bar->tray->bus); | 439 | loop_add_fd(bar->eventloop, bar->tray->fd, POLLIN, tray_in, bar->tray->bus); |
440 | } | 440 | } |
441 | #endif | 441 | #endif |
442 | while (1) { | 442 | while (bar->running) { |
443 | errno = 0; | 443 | errno = 0; |
444 | if (wl_display_flush(bar->display) == -1 && errno != EAGAIN) { | 444 | if (wl_display_flush(bar->display) == -1 && errno != EAGAIN) { |
445 | break; | 445 | break; |