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/main.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/main.c')
-rw-r--r-- | swaybar/main.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/swaybar/main.c b/swaybar/main.c index 4ef74629..108b16e9 100644 --- a/swaybar/main.c +++ b/swaybar/main.c | |||
@@ -11,13 +11,7 @@ | |||
11 | static struct swaybar swaybar; | 11 | static struct swaybar swaybar; |
12 | 12 | ||
13 | void sig_handler(int signal) { | 13 | void sig_handler(int signal) { |
14 | bar_teardown(&swaybar); | 14 | swaybar.running = false; |
15 | exit(0); | ||
16 | } | ||
17 | |||
18 | void sway_terminate(int code) { | ||
19 | bar_teardown(&swaybar); | ||
20 | exit(code); | ||
21 | } | 15 | } |
22 | 16 | ||
23 | int main(int argc, char **argv) { | 17 | int main(int argc, char **argv) { |
@@ -93,8 +87,6 @@ int main(int argc, char **argv) { | |||
93 | } | 87 | } |
94 | } | 88 | } |
95 | 89 | ||
96 | signal(SIGTERM, sig_handler); | ||
97 | |||
98 | if (!bar_setup(&swaybar, socket_path)) { | 90 | if (!bar_setup(&swaybar, socket_path)) { |
99 | free(socket_path); | 91 | free(socket_path); |
100 | return 1; | 92 | return 1; |
@@ -102,6 +94,10 @@ int main(int argc, char **argv) { | |||
102 | 94 | ||
103 | free(socket_path); | 95 | free(socket_path); |
104 | 96 | ||
97 | signal(SIGINT, sig_handler); | ||
98 | signal(SIGTERM, sig_handler); | ||
99 | |||
100 | swaybar.running = true; | ||
105 | bar_run(&swaybar); | 101 | bar_run(&swaybar); |
106 | bar_teardown(&swaybar); | 102 | bar_teardown(&swaybar); |
107 | return 0; | 103 | return 0; |