aboutsummaryrefslogtreecommitdiff
path: root/swaybar/main.c
diff options
context:
space:
mode:
authorIan Fan <ianfan0@gmail.com>2019-02-14 15:43:34 +0000
committerDrew DeVault <sir@cmpwn.com>2019-02-18 15:11:48 -0500
commit47abc45e867043b9144cc7a7181d08203d7ec4f2 (patch)
treeea3d270c931178a43eb8e28657808c84570b3ef2 /swaybar/main.c
parent8d708b8e1d804198a2c6a53342def6d1505845db (diff)
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.c14
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 @@
static struct swaybar swaybar;
void sig_handler(int signal) {
- bar_teardown(&swaybar);
- exit(0);
-}
-
-void sway_terminate(int code) {
- bar_teardown(&swaybar);
- exit(code);
+ swaybar.running = false;
}
int main(int argc, char **argv) {
@@ -93,8 +87,6 @@ int main(int argc, char **argv) {
}
}
- signal(SIGTERM, sig_handler);
-
if (!bar_setup(&swaybar, socket_path)) {
free(socket_path);
return 1;
@@ -102,6 +94,10 @@ int main(int argc, char **argv) {
free(socket_path);
+ signal(SIGINT, sig_handler);
+ signal(SIGTERM, sig_handler);
+
+ swaybar.running = true;
bar_run(&swaybar);
bar_teardown(&swaybar);
return 0;