/** * cairo_font_face_destroy: * @font_face: a #cairo_font_face_t * * Decreases the reference count on @font_face by one. If the result * is zero, then @font_face and all associated resources are freed. * See cairo_font_face_reference(). **/ void cairo_font_face_destroy (cairo_font_face_t *font_face) { if (font_face == NULL || font_face->ref_count == CAIRO_REF_COUNT_INVALID) return; CAIRO_MUTEX_LOCK (_cairo_font_face_mutex); assert (font_face->ref_count > 0); if (--(font_face->ref_count) > 0) { CAIRO_MUTEX_UNLOCK (_cairo_font_face_mutex); return; } CAIRO_MUTEX_UNLOCK (_cairo_font_face_mutex); font_face->backend->destroy (font_face); /* We allow resurrection to deal with some memory management for the * FreeType backend where cairo_ft_font_face_t and cairo_ft_unscaled_font_t * need to effectively mutually reference each other */ if (font_face->ref_count > 0) return; _cairo_user_data_array_fini (&font_face->user_data); free (font_face); }
/** * cairo_font_face_destroy: * @font_face: a #cairo_font_face_t * * Decreases the reference count on @font_face by one. If the result * is zero, then @font_face and all associated resources are freed. * See cairo_font_face_reference(). **/ void cairo_font_face_destroy (cairo_font_face_t *font_face) { if (font_face == NULL || CAIRO_REFERENCE_COUNT_IS_INVALID (&font_face->ref_count)) return; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&font_face->ref_count)); if (! _cairo_reference_count_dec_and_test (&font_face->ref_count)) return; if (font_face->backend->destroy) font_face->backend->destroy (font_face); /* We allow resurrection to deal with some memory management for the * FreeType backend where cairo_ft_font_face_t and cairo_ft_unscaled_font_t * need to effectively mutually reference each other */ if (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&font_face->ref_count)) return; _cairo_user_data_array_fini (&font_face->user_data); //+EAWebKitChange //11/10/2011 cairo_free (font_face); //-EAWebKitChange }
/** * cairo_font_face_destroy: * @font_face: a #cairo_font_face_t * * Decreases the reference count on @font_face by one. If the result * is zero, then @font_face and all associated resources are freed. * See cairo_font_face_reference(). **/ void cairo_font_face_destroy (cairo_font_face_t *font_face) { if (font_face == NULL) return; if (font_face->ref_count == (unsigned int)-1) return; assert (font_face->ref_count > 0); if (--(font_face->ref_count) > 0) return; font_face->backend->destroy (font_face); /* We allow resurrection to deal with some memory management for the * FreeType backend where cairo_ft_font_face_t and cairo_ft_unscaled_font_t * need to effectively mutually reference each other */ if (font_face->ref_count > 0) return; _cairo_user_data_array_fini (&font_face->user_data); free (font_face); }
cairo_status_t _cairo_user_data_array_copy (cairo_user_data_array_t *dst, const cairo_user_data_array_t *src) { /* discard any existing user-data */ if (dst->num_elements != 0) { _cairo_user_data_array_fini (dst); _cairo_user_data_array_init (dst); } return _cairo_array_append_multiple (dst, _cairo_array_index_const (src, 0), src->num_elements); }
cairo_status_t _cairo_user_data_array_copy (cairo_user_data_array_t *dst, cairo_user_data_array_t *src) { /* discard any existing user-data */ if (dst->num_elements != 0) { _cairo_user_data_array_fini (dst); _cairo_user_data_array_init (dst); } if (src->num_elements == 0) return CAIRO_STATUS_SUCCESS; return _cairo_array_append_multiple (dst, _cairo_array_index (src, 0), src->num_elements); }