Hello community, here is the log from the commit of package cairo for openSUSE:Factory checked in at 2016-08-16 13:02:28 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/cairo (Old) and /work/SRC/openSUSE:Factory/.cairo.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "cairo" Changes: -------- --- /work/SRC/openSUSE:Factory/cairo/cairo.changes 2016-03-29 14:25:41.000000000 +0200 +++ /work/SRC/openSUSE:Factory/.cairo.new/cairo.changes 2016-08-16 13:02:29.000000000 +0200 @@ -1,0 +2,19 @@ +Wed Jul 20 21:23:25 CEST 2016 - h...@suse.com + +- Add back cairo-bsc958844-deadlock-on-scaled-font-cache-reset.patch + (bsc#958844, fdo#93891). This is still not fixed upstream. + +------------------------------------------------------------------- +Wed Apr 13 08:08:36 UTC 2016 - idon...@suse.com + +- Update to GNOME 3.20 Fate#318572 +- Remove patch: + cairo-bsc958844-deadlock-on-scaled-font-cache-reset.patch. + +------------------------------------------------------------------- +Mon Dec 21 21:53:52 CET 2015 - h...@suse.com + +- Add cairo-bsc958844-deadlock-on-scaled-font-cache-reset.patch + to fix mutex deadlocks on certain documents (bsc#958844). + +------------------------------------------------------------------- New: ---- cairo-bsc958844-deadlock-on-scaled-font-cache-reset.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ cairo.spec ++++++ --- /var/tmp/diff_new_pack.bFwqFk/_old 2016-08-16 13:02:32.000000000 +0200 +++ /var/tmp/diff_new_pack.bFwqFk/_new 2016-08-16 13:02:32.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package cairo # -# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2016 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -31,6 +31,8 @@ Patch0: cairo-modules-no-version.patch # PATCH-FIX-UPSTREAM cairo-xlib-endianness.patch fdo#63461 bnc#882951 fcro...@suse.com -- Fix crash when client and server have different endianness Patch2: cairo-xlib-endianness.patch +# PATCH-FIX-UPSTREAM cairo-bsc958844-deadlock-on-scaled-font-cache-reset.patch fdo#93891 bsc#958844 h...@suse.com -- Fix mutex deadlock on certain documents. +Patch3: cairo-bsc958844-deadlock-on-scaled-font-cache-reset.patch BuildRequires: gtk-doc # Needed by patch0 BuildRequires: libtool @@ -140,6 +142,7 @@ %setup -q %patch0 -p1 %patch2 -p1 +%patch3 -p1 %build # Needed by patch0 and patch1 ++++++ cairo-bsc958844-deadlock-on-scaled-font-cache-reset.patch ++++++ diff --git a/src/cairo-scaled-font.c b/src/cairo-scaled-font.c index ac80c97..a22b36e 100644 --- a/src/cairo-scaled-font.c +++ b/src/cairo-scaled-font.c @@ -818,23 +818,35 @@ _cairo_scaled_font_thaw_cache (cairo_scaled_font_t *scaled_font) void _cairo_scaled_font_reset_cache (cairo_scaled_font_t *scaled_font) { + cairo_scaled_glyph_page_t *page; + CAIRO_MUTEX_LOCK (scaled_font->mutex); assert (! scaled_font->cache_frozen); assert (! scaled_font->global_cache_frozen); CAIRO_MUTEX_LOCK (_cairo_scaled_glyph_page_cache_mutex); - while (! cairo_list_is_empty (&scaled_font->glyph_pages)) { - cairo_scaled_glyph_page_t *page = - cairo_list_first_entry (&scaled_font->glyph_pages, - cairo_scaled_glyph_page_t, - link); + cairo_list_foreach_entry (page, + cairo_scaled_glyph_page_t, + &scaled_font->glyph_pages, + link) { cairo_scaled_glyph_page_cache.size -= page->cache_entry.size; _cairo_hash_table_remove (cairo_scaled_glyph_page_cache.hash_table, (cairo_hash_entry_t *) &page->cache_entry); + } + CAIRO_MUTEX_UNLOCK (_cairo_scaled_glyph_page_cache_mutex); + + /* Destroy scaled_font's pages while holding its lock only, and not the + * global page cache lock. The destructor can cause us to recurse and + * end up back here for a different scaled_font. */ + + while (! cairo_list_is_empty (&scaled_font->glyph_pages)) { + page = cairo_list_first_entry (&scaled_font->glyph_pages, + cairo_scaled_glyph_page_t, + link); _cairo_scaled_glyph_page_destroy (scaled_font, page); } - CAIRO_MUTEX_UNLOCK (_cairo_scaled_glyph_page_cache_mutex); + CAIRO_MUTEX_UNLOCK (scaled_font->mutex); }