aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.org.uk>2012-12-06 16:45:30 +0100
committerThomas White <taw@bitwiz.org.uk>2012-12-06 16:45:30 +0100
commitdbe8beafe6f0ab6d282f1ab6c1462815cb79ab87 (patch)
tree35c1961da426719b2587b13a9ffe50f137af7f88 /src
parent548c13ce48b7d78ac566968568b2e34474b10ab9 (diff)
Fix some memory leaks
Diffstat (limited to 'src')
-rw-r--r--src/render.c26
-rw-r--r--src/render.h1
2 files changed, 27 insertions, 0 deletions
diff --git a/src/render.c b/src/render.c
index 8546639..b5f4bd2 100644
--- a/src/render.c
+++ b/src/render.c
@@ -264,6 +264,32 @@ static int render_frame(struct frame *fr, cairo_t *cr,
}
+void recursive_buffer_free(struct frame *fr)
+{
+ int i;
+
+ for ( i=0; i<fr->num_children; i++ ) {
+ recursive_buffer_free(fr->children[i]);
+ }
+
+ if ( fr->contents != NULL ) {
+ cairo_surface_destroy(fr->contents);
+ fr->contents = NULL;
+ }
+}
+
+
+void free_render_buffers(struct slide *s)
+{
+ recursive_buffer_free(s->top);
+ if ( s->rendered_edit != NULL ) cairo_surface_destroy(s->rendered_edit);
+ if ( s->rendered_proj != NULL ) cairo_surface_destroy(s->rendered_proj);
+ if ( s->rendered_thumb != NULL ) {
+ cairo_surface_destroy(s->rendered_thumb);
+ }
+}
+
+
static void do_composite(struct frame *fr, cairo_t *cr)
{
if ( fr->contents == NULL ) return;
diff --git a/src/render.h b/src/render.h
index a390f05..7178fd1 100644
--- a/src/render.h
+++ b/src/render.h
@@ -30,5 +30,6 @@
#include "presentation.h"
extern cairo_surface_t *render_slide(struct slide *s, int w, int h);
+extern void free_render_buffers(struct slide *s);
#endif /* RENDER_H */