diff --git a/ChangeLog b/ChangeLog index 213ec1e31..8c191c869 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2003-11-06 Carl Worth + + * src/cairo.h: Add comment pondering memory management semantics + of cairo_current_target_surface. + + * src/cairo_pen.c (_cairo_pen_fini): NULL out pen->vertices after + free. + + * src/cairo_image_surface.c + (_cairo_image_abstract_surface_destroy): NULL out durface->data + after free. + 2003-11-04 Carl Worth * src/cairo_gstate.c (_cairo_gstate_set_target_surface): Enable diff --git a/src/cairo-gstate.c b/src/cairo-gstate.c index 038691af6..cdf492c9b 100644 --- a/src/cairo-gstate.c +++ b/src/cairo-gstate.c @@ -349,6 +349,11 @@ _cairo_gstate_current_target_surface (cairo_gstate_t *gstate) if (gstate == NULL) return NULL; +/* XXX: Do we want this? + if (gstate->surface) + _cairo_surface_reference (gstate->surface); +*/ + return gstate->surface; } diff --git a/src/cairo-image-surface.c b/src/cairo-image-surface.c index 818933f56..efa54d26a 100644 --- a/src/cairo-image-surface.c +++ b/src/cairo-image-surface.c @@ -193,8 +193,10 @@ _cairo_image_abstract_surface_destroy (void *abstract_surface) if (surface->ic_image) IcImageDestroy (surface->ic_image); - if (surface->owns_data) + if (surface->owns_data) { free (surface->data); + surface->data = NULL; + } free (surface); } diff --git a/src/cairo-pen.c b/src/cairo-pen.c index 0d54865a7..ce876a311 100644 --- a/src/cairo-pen.c +++ b/src/cairo-pen.c @@ -115,6 +115,8 @@ void _cairo_pen_fini (cairo_pen_t *pen) { free (pen->vertices); + pen->vertices = NULL; + _cairo_pen_init_empty (pen); } diff --git a/src/cairo.h b/src/cairo.h index ff3f552bc..c3ea63da9 100644 --- a/src/cairo.h +++ b/src/cairo.h @@ -490,6 +490,8 @@ cairo_current_miter_limit (cairo_t *cr); extern void __external_linkage cairo_current_matrix (cairo_t *cr, cairo_matrix_t *matrix); +/* XXX: Need to decide the memory mangement semantics of this + function. Should it reference the surface again? */ extern cairo_surface_t * __external_linkage cairo_current_target_surface (cairo_t *cr); diff --git a/src/cairo_gstate.c b/src/cairo_gstate.c index 038691af6..cdf492c9b 100644 --- a/src/cairo_gstate.c +++ b/src/cairo_gstate.c @@ -349,6 +349,11 @@ _cairo_gstate_current_target_surface (cairo_gstate_t *gstate) if (gstate == NULL) return NULL; +/* XXX: Do we want this? + if (gstate->surface) + _cairo_surface_reference (gstate->surface); +*/ + return gstate->surface; } diff --git a/src/cairo_image_surface.c b/src/cairo_image_surface.c index 818933f56..efa54d26a 100644 --- a/src/cairo_image_surface.c +++ b/src/cairo_image_surface.c @@ -193,8 +193,10 @@ _cairo_image_abstract_surface_destroy (void *abstract_surface) if (surface->ic_image) IcImageDestroy (surface->ic_image); - if (surface->owns_data) + if (surface->owns_data) { free (surface->data); + surface->data = NULL; + } free (surface); } diff --git a/src/cairo_pen.c b/src/cairo_pen.c index 0d54865a7..ce876a311 100644 --- a/src/cairo_pen.c +++ b/src/cairo_pen.c @@ -115,6 +115,8 @@ void _cairo_pen_fini (cairo_pen_t *pen) { free (pen->vertices); + pen->vertices = NULL; + _cairo_pen_init_empty (pen); }