Thanks a lot! I don't use cairo_pdf() very often. I discovered this problem because a user reported an issue with cairo_pdf() in knitr, and I found it was reproducible without using knitr.
Regards, Yihui -- https://yihui.name On Tue, Feb 21, 2017 at 5:32 PM, Paul Murrell <p...@stat.auckland.ac.nz> wrote: > Hi > > I decided to blame cairo_pdf(). > > There is a fix in r-devel (r72242) that works for the reported case, plus > some basic sanity checks. > > I could not complete 'make check-devel' because it was failing on > reg-tests-1d.R ... > >> stopifnot(length(fd) == 10, identical(fd, format(dct <- as.POSIXct(dlt)))) > Error: identical(fd, format(dct <- as.POSIXct(dlt))) is not TRUE > > ... anyone else seeing that ? > > I would appreciate confirmation from a heavier user of cairo_pdf() that I > have not broken anything. > > Paul > > > On 21/02/17 08:27, Paul Murrell wrote: >> >> 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 <x...@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@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 > p...@stat.auckland.ac.nz > http://www.stat.auckland.ac.nz/~paul/ ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel