Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:hiberis:mingw:win32
mingw32-evince
0007-tiff-workaround-for-cairo-bug.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0007-tiff-workaround-for-cairo-bug.patch of Package mingw32-evince
From c26274adbf87e51682714b019c39e5932c65931b Mon Sep 17 00:00:00 2001 From: Hib Eris <hib@hiberis.nl> Date: Fri, 15 Jul 2011 13:57:38 +0200 Subject: [PATCH 07/12] tiff: workaround for cairo bug When you call cairo_surface_destroy() on a surface that has snapshots, your run _cairo_surface_detach_snapshots, which runs _cairo_surface_detach_snapshot, which runs _cairo_surface_snapshot_copy_on_write(). In _cairo_surface_snapshot_copy_on_write (), when _cairo_image_surface_create_with_pixman_format () fails, e.g because out of memory, surface->status is set to error, but this is not checked in _cairo_surface_detach_snapshots(). To work around this, we do not call cairo_surface_destroy() but attach the surface to the cr, deferring destruction. --- backend/tiff/tiff-document.c | 12 +++++++++++- 1 files changed, 11 insertions(+), 1 deletions(-) diff --git a/backend/tiff/tiff-document.c b/backend/tiff/tiff-document.c index 7e3cfe7..304951e 100644 --- a/backend/tiff/tiff-document.c +++ b/backend/tiff/tiff-document.c @@ -631,7 +631,17 @@ tiff_document_print_print_page (EvDocumentPrint *document, cairo_paint (cr); cairo_restore (cr); - cairo_surface_destroy (surface); + // Hib Eris; 15/07/2011 + // I think we should destroy 'surface' here, but it seems + // cairo does not handle this well: + // Destroying 'surface' will cause the detachment of snapshots by + // cairo. This will cause a _cairo_surface_snapshot_copy_on_write + // which can fail with an out-of-memory error for large images. + // The failure is not handled by cairo and not returned by + // cairo_surface_destroy. + // For now, we uncomment it and attach the surface to the cr, deferring destruction. + //cairo_surface_destroy (surface); + cairo_set_user_data (cr, &key, surface, (cairo_destroy_func_t)cairo_surface_destroy); } static void -- 1.7.5.4
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor