/** * 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 }
void _cairo_xlib_screen_info_destroy (cairo_xlib_screen_info_t *info) { cairo_xlib_screen_info_t **prev; cairo_xlib_screen_info_t *list; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&info->ref_count)); if (! _cairo_reference_count_dec_and_test (&info->ref_count)) return; CAIRO_MUTEX_LOCK (info->display->mutex); for (prev = &info->display->screens; (list = *prev); prev = &list->next) { if (list == info) { *prev = info->next; break; } } CAIRO_MUTEX_UNLOCK (info->display->mutex); _cairo_xlib_screen_info_close_display (info); _cairo_xlib_display_destroy (info->display); _cairo_array_fini (&info->visuals); CAIRO_MUTEX_FINI (info->mutex); free (info); }
void _cairo_xlib_display_destroy (cairo_xlib_display_t *display) { assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&display->ref_count)); if (! _cairo_reference_count_dec_and_test (&display->ref_count)) return; /* destroy all outstanding notifies */ while (display->workqueue != NULL) { cairo_xlib_job_t *job = display->workqueue; display->workqueue = job->next; if (job->type == WORK && job->func.work.destroy != NULL) job->func.work.destroy (job->func.work.data); _cairo_freelist_free (&display->wq_freelist, job); } _cairo_freelist_fini (&display->wq_freelist); _cairo_freelist_fini (&display->hook_freelist); CAIRO_MUTEX_FINI (display->mutex); free (display); }
void _cairo_region_fini (cairo_region_t *region) { assert (! CAIRO_REFERENCE_COUNT_HAS_REFERENCE (®ion->ref_count)); pixman_region32_fini (®ion->rgn); VG (VALGRIND_MAKE_MEM_NOACCESS (region, sizeof (cairo_region_t))); }
cairo_gl_gradient_t * _cairo_gl_gradient_reference (cairo_gl_gradient_t *gradient) { assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&gradient->ref_count)); _cairo_reference_count_inc (&gradient->ref_count); return gradient; }
cairo_xlib_display_t * _cairo_xlib_display_reference (cairo_xlib_display_t *display) { assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&display->ref_count)); _cairo_reference_count_inc (&display->ref_count); return display; }
cairo_xlib_screen_info_t * _cairo_xlib_screen_info_reference (cairo_xlib_screen_info_t *info) { assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&info->ref_count)); _cairo_reference_count_inc (&info->ref_count); return info; }
/** * cairo_region_reference: * @region: a #cairo_region_t * * Increases the reference count on @region by one. This prevents * @region from being destroyed until a matching call to * cairo_region_destroy() is made. * * Return value: the referenced #cairo_region_t. * * Since: 1.10 **/ cairo_region_t * cairo_region_reference (cairo_region_t *region) { if (region == NULL || CAIRO_REFERENCE_COUNT_IS_INVALID (®ion->ref_count)) return NULL; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (®ion->ref_count)); _cairo_reference_count_inc (®ion->ref_count); return region; }
cairo_unscaled_font_t * _cairo_unscaled_font_reference (cairo_unscaled_font_t *unscaled_font) { if (unscaled_font == NULL) return NULL; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&unscaled_font->ref_count)); _cairo_reference_count_inc (&unscaled_font->ref_count); return unscaled_font; }
static cairo_clip_path_t * _cairo_clip_path_reference (cairo_clip_path_t *clip_path) { if (clip_path == NULL) return NULL; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&clip_path->ref_count)); _cairo_reference_count_inc (&clip_path->ref_count); return clip_path; }
/** * cairo_region_destroy: * @region: a #cairo_region_t * * Destroys a #cairo_region_t object created with * cairo_region_create(), cairo_region_copy(), or * or cairo_region_create_rectangle(). * * Since: 1.10 **/ void cairo_region_destroy (cairo_region_t *region) { if (region == NULL || CAIRO_REFERENCE_COUNT_IS_INVALID (®ion->ref_count)) return; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (®ion->ref_count)); if (! _cairo_reference_count_dec_and_test (®ion->ref_count)) return; _cairo_region_fini (region); free (region); }
cairo_drm_device_t * cairo_drm_device_reference (cairo_drm_device_t *device) { if (device == NULL || CAIRO_REFERENCE_COUNT_IS_INVALID (&device->ref_count)) { return device; } assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&device->ref_count)); _cairo_reference_count_inc (&device->ref_count); return device; }
static void _cairo_clip_path_destroy (cairo_clip_path_t *clip_path) { if (clip_path == NULL) return; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&clip_path->ref_count)); if (! _cairo_reference_count_dec_and_test (&clip_path->ref_count)) return; _cairo_path_fixed_fini (&clip_path->path); _cairo_clip_path_destroy (clip_path->prev); free (clip_path); }
void _cairo_unscaled_font_destroy (cairo_unscaled_font_t *unscaled_font) { if (unscaled_font == NULL) return; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&unscaled_font->ref_count)); if (! _cairo_reference_count_dec_and_test (&unscaled_font->ref_count)) return; unscaled_font->backend->destroy (unscaled_font); free (unscaled_font); }
void cairo_drm_device_destroy (cairo_drm_device_t *device) { if (device == NULL || CAIRO_REFERENCE_COUNT_IS_INVALID (&device->ref_count)) { return; } assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&device->ref_count)); if (! _cairo_reference_count_dec_and_test (&device->ref_count)) return; device->device.destroy (device); }
void _cairo_unscaled_font_destroy (cairo_unscaled_font_t *unscaled_font) { if (unscaled_font == NULL) return; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&unscaled_font->ref_count)); if (! _cairo_reference_count_dec_and_test (&unscaled_font->ref_count)) return; unscaled_font->backend->destroy (unscaled_font); //+EAWebKitChange //11/10/2011 cairo_free (unscaled_font); //-EAWebKitChange }
void _cairo_gl_gradient_destroy (cairo_gl_gradient_t *gradient) { cairo_gl_context_t *ctx; cairo_status_t ignore; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&gradient->ref_count)); if (! _cairo_reference_count_dec_and_test (&gradient->ref_count)) return; if (_cairo_gl_context_acquire (gradient->device, &ctx) == CAIRO_STATUS_SUCCESS) { glDeleteTextures (1, &gradient->tex); ignore = _cairo_gl_context_release (ctx, CAIRO_STATUS_SUCCESS); } free (gradient); }
static void _cairo_clip_path_destroy (cairo_clip_path_t *clip_path) { assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&clip_path->ref_count)); if (! _cairo_reference_count_dec_and_test (&clip_path->ref_count)) return; _cairo_path_fixed_fini (&clip_path->path); if (clip_path->region != NULL) cairo_region_destroy (clip_path->region); if (clip_path->surface != NULL) cairo_surface_destroy (clip_path->surface); if (clip_path->prev != NULL) _cairo_clip_path_destroy (clip_path->prev); _freed_pool_put (&clip_path_pool, clip_path); }
void _cairo_gl_gradient_destroy (cairo_gl_gradient_t *gradient) { cairo_gl_context_t *ctx; cairo_status_t ignore; assert (CAIRO_REFERENCE_COUNT_HAS_REFERENCE (&gradient->ref_count)); if (! _cairo_reference_count_dec_and_test (&gradient->ref_count)) return; if (_cairo_gl_context_acquire (gradient->device, &ctx) == CAIRO_STATUS_SUCCESS) { /* The gradient my still be active in the last operation, so flush */ _cairo_gl_composite_flush (ctx); glDeleteTextures (1, &gradient->tex); ignore = _cairo_gl_context_release (ctx, CAIRO_STATUS_SUCCESS); } free (gradient); }