summaryrefslogtreecommitdiff
path: root/src/cairo-tee-surface.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2010-07-05 22:40:54 +0200
committerBenjamin Otte <otte@redhat.com>2010-07-05 22:40:54 +0200
commit19da8e138d317c1770d8bbd21a49c657d954f126 (patch)
treec8944fdad7fde5c24a4c29748a5d63bf80583e50 /src/cairo-tee-surface.c
parenta9f30fc1f0c3e50715468b09707477973bf5268b (diff)
downloadcairo-19da8e138d317c1770d8bbd21a49c657d954f126.tar.gz
tee: Add proper error handling
Caught by api-special-cases
Diffstat (limited to 'src/cairo-tee-surface.c')
-rw-r--r--src/cairo-tee-surface.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/cairo-tee-surface.c b/src/cairo-tee-surface.c
index be530e03f..f17c37c22 100644
--- a/src/cairo-tee-surface.c
+++ b/src/cairo-tee-surface.c
@@ -468,6 +468,11 @@ cairo_tee_surface_add (cairo_surface_t *abstract_surface,
if (unlikely (abstract_surface->status))
return;
+ if (unlikely (abstract_surface->finished)) {
+ status = _cairo_surface_set_error (abstract_surface,
+ _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
+ return;
+ }
if (abstract_surface->backend != &cairo_tee_surface_backend) {
status = _cairo_surface_set_error (abstract_surface,
@@ -500,6 +505,14 @@ cairo_tee_surface_remove (cairo_surface_t *abstract_surface,
int n, num_slaves;
cairo_status_t status;
+ if (unlikely (abstract_surface->status))
+ return;
+ if (unlikely (abstract_surface->finished)) {
+ status = _cairo_surface_set_error (abstract_surface,
+ _cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
+ return;
+ }
+
if (abstract_surface->backend != &cairo_tee_surface_backend) {
status = _cairo_surface_set_error (abstract_surface,
_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));
@@ -540,6 +553,8 @@ cairo_tee_surface_index (cairo_surface_t *abstract_surface,
if (unlikely (abstract_surface->status))
return _cairo_surface_create_in_error (abstract_surface->status);
+ if (unlikely (abstract_surface->finished))
+ return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_FINISHED));
if (abstract_surface->backend != &cairo_tee_surface_backend)
return _cairo_surface_create_in_error (_cairo_error (CAIRO_STATUS_SURFACE_TYPE_MISMATCH));