Do not call window_unzoom from window_destroy because it will try to add

a notification which will get confused because the reference count is
already zero and end up back in window_destroy and a double
free. Instead, just destroy the layouts directly. Noticed by Thomas
Adam.
This commit is contained in:
nicm 2015-07-17 13:09:07 +00:00
parent 3192178f15
commit bad8d0fd20

View File

@ -341,12 +341,12 @@ window_create(const char *name, int argc, char **argv, const char *path,
void void
window_destroy(struct window *w) window_destroy(struct window *w)
{ {
window_unzoom(w);
RB_REMOVE(windows, &windows, w); RB_REMOVE(windows, &windows, w);
if (w->layout_root != NULL) if (w->layout_root != NULL)
layout_free(w); layout_free_cell(w->layout_root);
if (w->saved_layout_root != NULL)
layout_free_cell(w->saved_layout_root);
free(w->old_layout); free(w->old_layout);
if (event_initialized(&w->name_timer)) if (event_initialized(&w->name_timer))