aboutsummaryrefslogtreecommitdiff
path: root/window.c
diff options
context:
space:
mode:
authorNicholas Marriott <nicm@openbsd.org>2012-08-21 10:00:33 +0000
committerNicholas Marriott <nicm@openbsd.org>2012-08-21 10:00:33 +0000
commit58e8e0eac841d6d337de3da4e2f81665c3cd3faa (patch)
tree512efdef7e6cc33d659c2de5fdeb0c2a75eb71c4 /window.c
parenta1e4908ed7d14c5b406541144017d57db4750c56 (diff)
downloadrtmux-58e8e0eac841d6d337de3da4e2f81665c3cd3faa.tar.gz
rtmux-58e8e0eac841d6d337de3da4e2f81665c3cd3faa.tar.bz2
rtmux-58e8e0eac841d6d337de3da4e2f81665c3cd3faa.zip
Fix up window reference counting and don't crash if the rename timer
fires while the window is dead but still referenced. Fixes problem reported by Michael Scholz.
Diffstat (limited to 'window.c')
-rw-r--r--window.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/window.c b/window.c
index dcf1dd04..71225a9b 100644
--- a/window.c
+++ b/window.c
@@ -182,13 +182,8 @@ winlink_remove(struct winlinks *wwl, struct winlink *wl)
free(wl->status_text);
free(wl);
- if (w != NULL) {
- if (w->references == 0)
- fatal("bad reference count");
- w->references--;
- if (w->references == 0)
- window_destroy(w);
- }
+ if (w != NULL)
+ window_remove_ref(w);
}
struct winlink *
@@ -363,6 +358,16 @@ window_destroy(struct window *w)
}
void
+window_remove_ref(struct window *w)
+{
+ if (w->references == 0)
+ fatal("bad reference count");
+ w->references--;
+ if (w->references == 0)
+ window_destroy(w);
+}
+
+void
window_set_name(struct window *w, const char *new_name)
{
free(w->name);