From 80a685ee51da69ae0a7bae11620c5f33c3cd2de2 Mon Sep 17 00:00:00 2001 From: Stivvo Date: Sat, 31 Oct 2020 17:10:06 +0100 Subject: Fix crash with no monitors left When there's no monitors left, prevent the while in cleanupmon() to become an infinite loop Also switch to the left monitors instead of the right --- dwl.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/dwl.c b/dwl.c index ca352c4..d875eaa 100644 --- a/dwl.c +++ b/dwl.c @@ -696,20 +696,19 @@ cleanupmon(struct wl_listener *listener, void *data) { struct wlr_output *wlr_output = data; Monitor *m = wlr_output->data; + int nmons = wl_list_length(&mons), i = 0; wl_list_remove(&m->destroy.link); wl_list_remove(&m->frame.link); wl_list_remove(&m->link); wlr_output_layout_remove(output_layout, m->wlr_output); - updatemons(); do // don't switch to disabled mons - selmon = wl_container_of(mons.next, selmon, link); - while (!selmon->wlr_output->enabled); + selmon = wl_container_of(mons.prev, selmon, link); + while (!selmon->wlr_output->enabled && i++ < nmons); focusclient(selclient(), focustop(selmon), 1); closemon(m); - free(m); } -- cgit v1.2.3