cairo: Avoid locking glib by looking up color names elsewhere.
authorMatt Birkholz <matt@birchwood-abbey.net>
Sun, 11 Mar 2018 22:34:01 +0000 (15:34 -0700)
committerMatt Birkholz <matt@birchwood-abbey.net>
Sun, 11 Mar 2018 22:34:01 +0000 (15:34 -0700)
src/cairo/cairo.scm

index 06ad9395df33436f953d29f2b4130fec37c2206c..e6bd01114496c354607e4a63137c7ecbce4912a6 100644 (file)
@@ -124,7 +124,10 @@ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 
 (define (cairo-pattern-add-color-stop pattern offset color)
   (guarantee-cairo-pattern pattern 'cairo-pattern-add-color-stop)
-  (let ((c (->color color 'cairo-pattern-add-color-stop)))
+  (let ((c (if (color? color)
+              color
+              (with-glib-lock
+               (lambda () (->color color 'cairo-pattern-add-color-stop))))))
     (C-call "cairo_pattern_add_color_stop_rgba" pattern (->flonum offset)
            (color-red c) (color-green c) (color-blue c) (color-alpha c))))
 \f
@@ -183,7 +186,10 @@ Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
 
 (define (cairo-set-source-color cairo color)
   (guarantee-cairo cairo 'cairo-set-source-color)
-  (let ((c (->color color 'cairo-set-source-color)))
+  (let ((c (if (color? color)
+              color
+              (with-glib-lock
+               (lambda () (->color color 'cairo-set-source-color))))))
     (C-call "cairo_set_source_rgba" cairo
            (color-red c) (color-green c) (color-blue c) (color-alpha c))))