From 1270f8fed8642ac61d14be6a3aeb8d002db82a78 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 25 Jan 2011 22:31:50 +0000 Subject: Check if the index is in use and fail before creating the child process, rather than leaving a stray child on failure. --- window.c | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'window.c') diff --git a/window.c b/window.c index f965d27f..2d332c40 100644 --- a/window.c +++ b/window.c @@ -123,7 +123,7 @@ winlink_count(struct winlinks *wwl) } struct winlink * -winlink_add(struct winlinks *wwl, struct window *w, int idx) +winlink_add(struct winlinks *wwl, int idx) { struct winlink *wl; @@ -135,14 +135,18 @@ winlink_add(struct winlinks *wwl, struct window *w, int idx) wl = xcalloc(1, sizeof *wl); wl->idx = idx; - wl->window = w; RB_INSERT(winlinks, wwl, wl); - w->references++; - return (wl); } +void +winlink_set_window(struct winlink *wl, struct window *w) +{ + wl->window = w; + w->references++; +} + void winlink_remove(struct winlinks *wwl, struct winlink *wl) { @@ -153,11 +157,13 @@ winlink_remove(struct winlinks *wwl, struct winlink *wl) xfree(wl->status_text); xfree(wl); - if (w->references == 0) - fatal("bad reference count"); - w->references--; - if (w->references == 0) - window_destroy(w); + if (w != NULL) { + if (w->references == 0) + fatal("bad reference count"); + w->references--; + if (w->references == 0) + window_destroy(w); + } } struct winlink * -- cgit