diff options
Diffstat (limited to 'taro')
| -rw-r--r-- | taro/daemon.c | 19 |
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"); } |