[Rd] Sweave resource leak: leftover temp files (PR#7998)

murdoch@stats.uwo.ca murdoch at stats.uwo.ca
Tue Jul 12 14:32:26 CEST 2005


Prof Brian Ripley wrote:
> This is actually a Windows bug.  Those files are unlink()ed, and it seems 
> Windows is not respecting that (not an unknown phenomenon).  I have tried 
> a few workarounds, and am about to commit one that seems to work.

I guess you mean the C unlink, since I don't see the R unlink being 
called.

Generally deletes fail on Windows when files are locked, e.g. open for 
reading or writing.  I haven't seen Windows file deletes fail in other 
circumstances, so I suspect this was an R, MinGW or MSVCRT bug rather 
than a Windows bug.

Duncan Murdoch
> 
> No files are left over on a decent operating system, e.g. Solaris or FC3 
> Linux.
> 
> On Fri, 8 Jul 2005 murdoch at stats.uwo.ca wrote:
> 
> 
>>Harold, I've taken a closer look at your example and I'd call this an
>>Sweave bug.  It creates tempfiles each time you run it, and doesn't
>>delete them at the end.  For example:
>>
>>
>>>list.files(tempdir())
>>
>>character(0)
>>
>>>testfile <- system.file("Sweave", "Sweave-test-1.Rnw", package = "utils")
>>>Sweave(testfile, out="junk.tex")
>>
>>Writing to file junk.tex
>>Processing code chunks ...
>> 1 : print term verbatim
>> 2 : term hide
>> 3 : echo print term verbatim
>> 4 : term verbatim
>> 5 : echo term verbatim
>> 6 : echo term verbatim eps pdf
>> 7 : echo term verbatim eps pdf
>>
>>You can now run LaTeX on 'junk.tex'
>>
>>>list.files(tempdir())
>>
>> [1] "Rf10523" "Rf13872" "Rf17129" "Rf2055"  "Rf2203"  "Rf2403"  "Rf27095"
>> [8] "Rf2892"  "Rf31415" "Rf5290"  "Rf6251"  "Rf6482"  "Rf7055"  "Rf724"
>>
>>>Sweave(testfile, out="C:/temp/junk.tex")
>>
>>Writing to file C:/temp/junk.tex
>>Processing code chunks ...
>> 1 : print term verbatim
>> 2 : term hide
>> 3 : echo print term verbatim
>> 4 : term verbatim
>> 5 : echo term verbatim
>> 6 : echo term verbatim eps pdf
>> 7 : echo term verbatim eps pdf
>>
>>You can now run LaTeX on 'C:/temp/junk.tex'
>>
>>>list.files(tempdir())
>>
>> [1] "Rf10523" "Rf12679" "Rf1311"  "Rf13484" "Rf13872" "Rf17129" "Rf17288"
>> [8] "Rf2055"  "Rf21774" "Rf2203"  "Rf23417" "Rf2403"  "Rf27095" "Rf2892"
>>[15] "Rf29444" "Rf31128" "Rf31415" "Rf32520" "Rf3338"  "Rf5290"  "Rf5551"
>>[22] "Rf6251"  "Rf6482"  "Rf7055"  "Rf724"   "Rf7543"  "Rf758"   "Rf7673"
>>
>>>unlink(list.files(tempdir(),full=T))
>>>list.files(tempdir())
>>
>>character(0)
>>
>>Harold:  a workaround for this would be to wrap your Sweave call in
>>something like this:
>>
>>keep <- list.files(tempdir(), full=TRUE)  # keep previous temp files
>>
>>... Call Sweave here ...
>>
>>temps <- list.files(tempdir(), full=TRUE)
>>unlink(temps[!(temps %in% keep)])  # delete the newly created ones
>>
>>______________________________________________
>>R-devel at r-project.org mailing list
>>https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
> 
>



More information about the R-devel mailing list