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.
This commit is contained in:
Robert Bragg 2011-05-11 14:11:31 +01:00
parent 2282455f27
commit 89e46a472f

View File

@ -1102,15 +1102,21 @@ _cogl_free_framebuffer_stack (GSList *stack)
{ {
CoglFramebufferStackEntry *entry = l->data; CoglFramebufferStackEntry *entry = l->data;
if (entry->draw_buffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN) if (entry->draw_buffer)
_cogl_offscreen_free (COGL_OFFSCREEN (entry->draw_buffer)); {
else if (entry->draw_buffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN)
_cogl_onscreen_free (COGL_ONSCREEN (entry->draw_buffer)); _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) if (entry->read_buffer)
_cogl_offscreen_free (COGL_OFFSCREEN (entry->read_buffer)); {
else if (entry->read_buffer->type == COGL_FRAMEBUFFER_TYPE_OFFSCREEN)
_cogl_onscreen_free (COGL_ONSCREEN (entry->read_buffer)); _cogl_offscreen_free (COGL_OFFSCREEN (entry->read_buffer));
else
_cogl_onscreen_free (COGL_ONSCREEN (entry->read_buffer));
}
g_slice_free (CoglFramebufferStackEntry, entry); g_slice_free (CoglFramebufferStackEntry, entry);
} }