From db77530a35f1adbd66f567d733b55a57a62304d8 Mon Sep 17 00:00:00 2001 From: Dominique Martinet Date: Mon, 14 Aug 2017 14:59:48 +0200 Subject: [PATCH] Fix output destory: impl->destroy must be called last + obvious double-free --- types/wlr_output.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/types/wlr_output.c b/types/wlr_output.c index 04dcbfa5..b4618194 100644 --- a/types/wlr_output.c +++ b/types/wlr_output.c @@ -178,13 +178,16 @@ void wlr_output_destroy(struct wlr_output *output) { wlr_texture_destroy(output->cursor.texture); wlr_renderer_destroy(output->cursor.renderer); - output->impl->destroy(output); for (size_t i = 0; output->modes && i < output->modes->length; ++i) { struct wlr_output_mode *mode = output->modes->items[i]; free(mode); - free(mode); } list_free(output->modes); + if (output->impl->destroy) { + output->impl->destroy(output); + } else { + free(output); + } } void wlr_output_effective_resolution(struct wlr_output *output,