summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicholas Marriott <nicholas.marriott@gmail.com>2007-09-21 20:45:06 +0000
committerNicholas Marriott <nicholas.marriott@gmail.com>2007-09-21 20:45:06 +0000
commit5ea2ac36e4eaf1ae3303ada380cad8b4bbcbfe8f (patch)
tree64cbff6b749f14366a951cb203b41b03778c3ad1
parent70c1ba57706f47d4ea7539a85a735c2b31a673c1 (diff)
Stop crashing when exiting windows.
-rw-r--r--session.c16
-rw-r--r--window.c7
2 files changed, 9 insertions, 14 deletions
diff --git a/session.c b/session.c
index dbc5263f..2596971b 100644
--- a/session.c
+++ b/session.c
@@ -1,4 +1,4 @@
-/* $Id: session.c,v 1.14 2007-09-21 20:02:23 nicm Exp $ */
+/* $Id: session.c,v 1.15 2007-09-21 20:45:05 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -129,20 +129,16 @@ session_attach(struct session *s, struct window *w)
int
session_detach(struct session *s, struct window *w)
{
+ if (s->window == w && session_last(s) != 0 && session_previous(s) != 0)
+ session_next(s);
+ if (s->last == w)
+ s->last = NULL;
+
window_remove(&s->windows, w);
if (ARRAY_EMPTY(&s->windows)) {
session_destroy(s);
return (1);
}
-
- if (s->last == w)
- s->last = NULL;
- if (s->window == w) {
- /* Reset s->window to stop it ending up in s->last. */
- s->window = NULL;
- if (session_last(s) != 0 && session_previous(s) != 0)
- session_next(s);
- }
return (0);
}
diff --git a/window.c b/window.c
index dc7eec10..5a1e8c22 100644
--- a/window.c
+++ b/window.c
@@ -1,4 +1,4 @@
-/* $Id: window.c,v 1.9 2007-09-21 18:20:44 nicm Exp $ */
+/* $Id: window.c,v 1.10 2007-09-21 20:45:06 nicm Exp $ */
/*
* Copyright (c) 2007 Nicholas Marriott <nicm@users.sourceforge.net>
@@ -181,9 +181,8 @@ window_remove(struct windows *ww, struct window *w)
if (window_index(ww, w, &i) != 0)
fatalx("window not found");
- if (i != ARRAY_LENGTH(ww) - 1)
- ARRAY_SET(ww, i, NULL);
- else
+ ARRAY_SET(ww, i, NULL);
+ while (!ARRAY_EMPTY(ww) && ARRAY_LAST(ww) == NULL)
ARRAY_TRUNC(ww, 1);
w->references--;