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);
 }
 

Reply via email to