From 48d847162558dc09388942a96ff443c253068d68 Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 22 Mar 2010 13:05:23 +0000 Subject: [PATCH] recording: Cleanup the clip on error. Whilst recording the commands, remember to cleanup the local clip after detecting an error. --- src/cairo-recording-surface.c | 5 +++++ src/cairo-surface-snapshot.c | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/cairo-recording-surface.c b/src/cairo-recording-surface.c index 7d2dda400..7f9c76643 100644 --- a/src/cairo-recording-surface.c +++ b/src/cairo-recording-surface.c @@ -347,6 +347,7 @@ _cairo_recording_surface_paint (void *abstract_surface, CLEANUP_SOURCE: _cairo_pattern_fini_snapshot (&command->source.base); CLEANUP_COMMAND: + _cairo_clip_fini (&command->header.clip); free (command); return status; } @@ -390,6 +391,7 @@ _cairo_recording_surface_mask (void *abstract_surface, CLEANUP_SOURCE: _cairo_pattern_fini_snapshot (&command->source.base); CLEANUP_COMMAND: + _cairo_clip_fini (&command->header.clip); free (command); return status; } @@ -449,6 +451,7 @@ _cairo_recording_surface_stroke (void *abstract_surface, CLEANUP_SOURCE: _cairo_pattern_fini_snapshot (&command->source.base); CLEANUP_COMMAND: + _cairo_clip_fini (&command->header.clip); free (command); return status; } @@ -499,6 +502,7 @@ _cairo_recording_surface_fill (void *abstract_surface, CLEANUP_SOURCE: _cairo_pattern_fini_snapshot (&command->source.base); CLEANUP_COMMAND: + _cairo_clip_fini (&command->header.clip); free (command); return status; } @@ -592,6 +596,7 @@ _cairo_recording_surface_show_text_glyphs (void *abstract_surface, _cairo_pattern_fini_snapshot (&command->source.base); CLEANUP_COMMAND: + _cairo_clip_fini (&command->header.clip); free (command); return status; } diff --git a/src/cairo-surface-snapshot.c b/src/cairo-surface-snapshot.c index 8ab6fa6c3..cbb6aa3d9 100644 --- a/src/cairo-surface-snapshot.c +++ b/src/cairo-surface-snapshot.c @@ -119,6 +119,7 @@ _cairo_surface_snapshot_copy_on_write (cairo_surface_t *surface) status = _cairo_surface_acquire_source_image (snapshot->target, &image, &extra); if (unlikely (status)) { snapshot->target = _cairo_surface_create_in_error (status); + status = _cairo_surface_set_error (surface, status); return; } @@ -140,6 +141,7 @@ _cairo_surface_snapshot_copy_on_write (cairo_surface_t *surface) snapshot->clone = &clone->base; } else { snapshot->clone = &clone->base; + status = _cairo_surface_set_error (surface, clone->base.status); } _cairo_surface_release_source_image (snapshot->target, image, extra);