From ec6f3fd6106b1285a594c3732d31d3b63e0bc779 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Wed, 27 Jun 2012 12:28:36 -0600 Subject: [PATCH] racket/draw: avoid callback-based PNG writing Doc rendering has been occasionally crashing in Pixman/Cairo. It might have something to do with a non-atomic callback, so let's try avoiding that, first. (If that doesn't work, the next step is to avoid using Cairo in a multi-threaded way, for which this is a first step, too.) --- collects/racket/draw/private/bitmap.rkt | 9 +++++---- collects/racket/draw/unsafe/cairo.rkt | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/collects/racket/draw/private/bitmap.rkt b/collects/racket/draw/private/bitmap.rkt index 5a46bc4e88..2e1e35efaf 100644 --- a/collects/racket/draw/private/bitmap.rkt +++ b/collects/racket/draw/private/bitmap.rkt @@ -545,10 +545,10 @@ (let ([w (create-png-writer out width height #t #f)]) (write-png w rows) (destroy-png-writer w)))] - [(and (not alpha-channel?) - loaded-mask - (= width (send loaded-mask get-width)) - (= height (send loaded-mask get-height))) + [else #;(and (not alpha-channel?) + loaded-mask + (= width (send loaded-mask get-width)) + (= height (send loaded-mask get-height))) (let ([bstr (make-bytes (* width height 4))]) (get-argb-pixels 0 0 width height bstr) (when loaded-mask @@ -568,6 +568,7 @@ (let ([w (create-png-writer out width height #f #t)]) (write-png w rows) (destroy-png-writer w))))] + #; [else ;; Use Cairo built-in support: (let ([proc (lambda (ignored bstr len) diff --git a/collects/racket/draw/unsafe/cairo.rkt b/collects/racket/draw/unsafe/cairo.rkt index 361ea6ca36..04b49dec50 100644 --- a/collects/racket/draw/unsafe/cairo.rkt +++ b/collects/racket/draw/unsafe/cairo.rkt @@ -306,7 +306,7 @@ -> _int) (_pointer = #f) -> _cairo_surface_t/null)) - +;; Not recommended, unless it makes sense to make the allback atomic: (define-cairo cairo_surface_write_to_png_stream (_fun _cairo_surface_t (_fun _pointer (s : _pointer)