aboutsummaryrefslogtreecommitdiff
path: root/swaybar
diff options
context:
space:
mode:
authorDrew DeVault <sir@cmpwn.com>2019-02-15 16:25:28 +0100
committerGitHub <noreply@github.com>2019-02-15 16:25:28 +0100
commitcdbf8e8b2540768cc4c82176f6510d8e6ae8f037 (patch)
treee98b9ffe575791ab9fb48e52e5339c55bff2005a /swaybar
parent96de2b539c00992003664d0de225cc28c2fb9e54 (diff)
parentd3c527220a445c1f88b892c0e77e801d326541b7 (diff)
Merge pull request #3692 from ianyfan/swaybar
Fix crash and memory leak on bar termination
Diffstat (limited to 'swaybar')
-rw-r--r--swaybar/bar.c6
-rw-r--r--swaybar/main.c14
-rw-r--r--swaybar/tray/host.c6
3 files changed, 11 insertions, 15 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 @@
#include <fcntl.h>
#include <poll.h>
#include <signal.h>
+#include <stdbool.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>
@@ -403,8 +404,7 @@ bool bar_setup(struct swaybar *bar, const char *socket_path) {
static void display_in(int fd, short mask, void *data) {
struct swaybar *bar = data;
if (wl_display_dispatch(bar->display) == -1) {
- bar_teardown(bar);
- exit(0);
+ bar->running = false;
}
}
@@ -439,7 +439,7 @@ void bar_run(struct swaybar *bar) {
loop_add_fd(bar->eventloop, bar->tray->fd, POLLIN, tray_in, bar->tray->bus);
}
#endif
- while (1) {
+ while (bar->running) {
errno = 0;
if (wl_display_flush(bar->display) == -1 && errno != EAGAIN) {
break;
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;
diff --git a/swaybar/tray/host.c b/swaybar/tray/host.c
index 215e1e72..451b0896 100644
--- a/swaybar/tray/host.c
+++ b/swaybar/tray/host.c
@@ -189,9 +189,9 @@ bool init_host(struct swaybar_host *host, char *protocol,
goto error;
}
- sd_bus_slot_set_floating(reg_slot, 1);
- sd_bus_slot_set_floating(unreg_slot, 1);
- sd_bus_slot_set_floating(watcher_slot, 1);
+ sd_bus_slot_set_floating(reg_slot, 0);
+ sd_bus_slot_set_floating(unreg_slot, 0);
+ sd_bus_slot_set_floating(watcher_slot, 0);
sway_log(SWAY_DEBUG, "Registered %s", host->service);
return true;