summaryrefslogtreecommitdiff
path: root/taro
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2024-10-24 18:37:55 -0400
committerAndrew Opalach <andrew@akon.city> 2024-10-24 18:37:55 -0400
commit5f40252ce60daa4665b3cf8082799e29734c2023 (patch)
tree451825f3c0a19841b5bbaf2e366d1e9a4034f36d /taro
parentfc0929a302111320db9a62241aaed01b6ccfca18 (diff)
downloadmauri-5f40252ce60daa4665b3cf8082799e29734c2023.tar.gz
mauri-5f40252ce60daa4665b3cf8082799e29734c2023.tar.bz2
mauri-5f40252ce60daa4665b3cf8082799e29734c2023.zip
Don't crash on daemon exit
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'taro')
-rw-r--r--taro/daemon.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/taro/daemon.c b/taro/daemon.c
index bf7434c..d325271 100644
--- a/taro/daemon.c
+++ b/taro/daemon.c
@@ -32,10 +32,12 @@ struct monitor {
struct daemon {
struct aki_event_loop loop;
struct aki_signal quit_signal;
+ s32 context_poll_fd;
struct aki_poll context_poll;
array(struct monitor *) monitors;
struct aki_socket ipc_socket;
bool ipc_connected;
+ bool ipc_errored;
struct aki_poll ipc_poll;
struct {
u8 *buf;
@@ -265,6 +267,7 @@ static void output_discovered_callback(void *userdata, struct stl_monitor *os_mo
aki_fs_event_start(&monitor->selection_event, &monitor->dmon->loop);
}
+// https://vi.stackexchange.com/questions/25030/vim-not-firing-inotify-events-when-writing-file
static void conf_fs_event_callback(void *userdata, struct inotify_event *event)
{
struct daemon *dmon = (struct daemon *)userdata;
@@ -398,8 +401,12 @@ static void quit_signal_callback(void *userdata)
aki_fs_event_stop(&monitor->selection_event);
}
aki_fs_event_stop(&dmon->conf_event);
- aki_poll_stop(&dmon->ipc_poll);
- aki_poll_stop(&dmon->context_poll);
+ if (!dmon->ipc_errored) {
+ aki_poll_stop(&dmon->ipc_poll);
+ }
+ if (dmon->context_poll_fd != -1) {
+ aki_poll_stop(&dmon->context_poll);
+ }
aki_signal_stop(&dmon->quit_signal);
}
@@ -437,10 +444,10 @@ s32 main(void)
al_array_init(dmon.monitors);
stl_set_output_discovered_callback(output_discovered_callback, &dmon);
if (!stl_global_init(true)) goto out;
- s32 poll_fd = stl_global_get_poll_fd();
- if (poll_fd != -1) {
+ dmon.context_poll_fd = stl_global_get_poll_fd();
+ if (dmon.context_poll_fd != -1) {
aki_poll_init(&dmon.context_poll, context_poll_callback, &dmon);
- aki_poll_set(&dmon.context_poll, poll_fd, AKI_POLL_READ);
+ aki_poll_set(&dmon.context_poll, dmon.context_poll_fd, AKI_POLL_READ);
aki_poll_start(&dmon.context_poll, &dmon.loop);
}
@@ -491,10 +498,12 @@ s32 main(void)
aki_poll_init(&dmon.ipc_poll, ipc_poll_callback, &dmon);
aki_poll_set(&dmon.ipc_poll, aki_socket_get_fd(&dmon.ipc_socket), AKI_POLL_WRITE);
dmon.ipc_connected = false;
+ dmon.ipc_errored = false;
char *swaysock = getenv("SWAYSOCK");
if (swaysock && aki_socket_connect(&dmon.ipc_socket, al_str_cr(swaysock), 0)) {
aki_poll_start(&dmon.ipc_poll, &dmon.loop);
} else {
+ dmon.ipc_errored = true;
al_log_warn("tarod", "couldn't connect to sway ipc socket");
}