From paul at stat.auckland.ac.nz  Mon Feb 20 20:27:27 2017
From: paul at stat.auckland.ac.nz (Paul Murrell)
Date: Tue, 21 Feb 2017 08:27:27 +1300
Subject: [Rd] [FORGED] Re: Replaying a recorded plot (mixed base and
 grid) from pdf() in cairo_pdf() crashes R
In-Reply-To: <CANROs4cd=EhVBsn25njQv7Uea+UHy=FqL18A-wOQ7pehmjXFjg@mail.gmail.com>
References: <CANROs4dy7xvbYRAXHMQbrBjQiYrYgETUpBAAyPBk-rzOaNoWCA@mail.gmail.com>
	<CANROs4cd=EhVBsn25njQv7Uea+UHy=FqL18A-wOQ7pehmjXFjg@mail.gmail.com>
Message-ID: <03c36881-6487-7446-2fc4-90458106cd68@stat.auckland.ac.nz>

Hi

This appears to be happening (at least) because cairo_pdf() delays 
initialising a Cairo surface until BM_NewPage(), rather than 
initiliasing a Cairo surface in BM_Open(), and replayPlot() triggers 
some activity (set clip region) on the device BEFORE a new page is 
started (so the pointer to the Cairo surface is null, so BOOM).

Not sure yet whether to blame replayPlot() for not starting with a new 
page operation OR to blame cairo_pdf() for not initialising a Cairo 
surface at device startup.

If anyone who knows more about Cairo (or cairo_pdf()) wants to point out 
a good reason for the way cairo_pdf() currently works, please don't hold 
back.

Paul

On 21/02/17 05:30, Yihui Xie wrote:
> A quick follow-up: I just used cairo_pdf() as the recording device,
> and it crashes R as well, so it is probably not relevant to pdf() but
> an issue specific to cairo_pdf().
>
> cairo_pdf()
> dev.control('enable')
>
> library("grid")
> plot(1)
> grid.text("A")
>
> res = recordPlot()
> dev.off()
>
> cairo_pdf()
> replayPlot(res)
> dev.off()
>
>
> Regards,
> Yihui
> --
> https://yihui.name
>
>
> On Mon, Feb 20, 2017 at 10:24 AM, Yihui Xie <xie at yihui.name> wrote:
>> Hi,
>>
>> I wonder if this is expected or I'm doing a wrong thing.
>>
>> pdf()
>> dev.control('enable')
>>
>> library("grid")
>> plot(1)
>> grid.text("A")
>>
>> res = recordPlot()
>> dev.off()
>>
>> cairo_pdf()
>> replayPlot(res)
>> dev.off()
>>
>>
>>  *** caught segfault ***
>> address 0x4, cause 'memory not mapped'
>>
>>
>>> sessionInfo()
>> R version 3.3.2 (2016-10-31)
>> Platform: x86_64-apple-darwin13.4.0 (64-bit)
>> Running under: macOS Sierra 10.12.3
>>
>> locale:
>> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
>>
>> attached base packages:
>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>
>> loaded via a namespace (and not attached):
>> [1] tools_3.3.2 yaml_2.1.14
>>
>> Regards,
>> Yihui
>> --
>> https://yihui.name
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

-- 
Dr Paul Murrell
Department of Statistics
The University of Auckland
Private Bag 92019
Auckland
New Zealand
64 9 3737599 x85392
paul at stat.auckland.ac.nz
http://www.stat.auckland.ac.nz/~paul/



[Rd] [FORGED] Re: Replaying a recorded plot (mixed base and grid) from pdf() in cairo_pdf() crashes R
Paul Murrell