From 89e46a472ffcb48a78ba5ab0ee77812299c9275f Mon Sep 17 00:00:00 2001 From: Robert Bragg Date: Wed, 11 May 2011 14:11:31 +0100 Subject: [PATCH] framebuffer: check we have a draw/read_buffer before freeing When freeing a framebuffer stack it's possible to have entries with NULL draw or read buffers so we should check that before calling cogl_onscreen/offscreen_free. This fixes a crash with the wayland backend when running conformance tests such as cogl-test-object which never push a framebuffer. --- cogl/cogl-framebuffer.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/cogl/cogl-framebuffer.c b/cogl/cogl-framebuffer.c index 73cce73ff..cfdb2656d 100644 --- a/cogl/cogl-framebuffer.c +++ b/cogl/cogl-framebuffer.c @@ -1102,15 +1102,21 @@ _cogl_free_framebuffer_stack (GSList *stack) { CoglFramebufferStackEntry *entry = l->data; - if (entry->draw_buffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN) - _cogl_offscreen_free (COGL_OFFSCREEN (entry->draw_buffer)); - else - _cogl_onscreen_free (COGL_ONSCREEN (entry->draw_buffer)); + if (entry->draw_buffer) + { + if (entry->draw_buffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN) + _cogl_offscreen_free (COGL_OFFSCREEN (entry->draw_buffer)); + else + _cogl_onscreen_free (COGL_ONSCREEN (entry->draw_buffer)); + } - if (entry->read_buffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN) - _cogl_offscreen_free (COGL_OFFSCREEN (entry->read_buffer)); - else - _cogl_onscreen_free (COGL_ONSCREEN (entry->read_buffer)); + if (entry->read_buffer) + { + if (entry->read_buffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN) + _cogl_offscreen_free (COGL_OFFSCREEN (entry->read_buffer)); + else + _cogl_onscreen_free (COGL_ONSCREEN (entry->read_buffer)); + } g_slice_free (CoglFramebufferStackEntry, entry); }