Just found in the documentation for getHook that packages are not unloaded on quit. How should I force a package to unload on quit?
-Andrew On Tue, Nov 16, 2010 at 10:25 AM, Andrew Redd <amr...@gmail.com> wrote: > Are packages unloaded on quit so that the .Last.lib or .onUnload are > called for packages? > > -Andrew > > On Fri, Nov 12, 2010 at 3:52 PM, Andrew Redd <amr...@gmail.com> wrote: >> Perhaps you could help me make some sense of this. Here is a printout >> of my sessions. >> --- >> toys$R -q >>> library(test2) >>> gpualloctest() >> testing allocation on gpu >> C Finished >> Collecting Garbage >> done. >>> q() >> Save workspace image? [y/n/c]: n >> >> *** caught segfault *** >> address 0x7f12ec1add50, cause 'memory not mapped' >> >> Possible actions: >> 1: abort (with core dump, if enabled) >> 2: normal R exit >> 3: exit R without saving workspace >> 4: exit R saving workspace >> Selection: 1 >> aborting ... >> Segmentation fault >> toys$R -q >>> library(test2) >>> gpualloctest() >> testing allocation on gpu >> C Finished >> Collecting Garbage >> done. >>> library.dynam.unload('test2',system.file(package='test2')) >>> q() >> Save workspace image? [y/n/c]: n >> toys$ >> --- >> >> I have a in the test2/R/zzz.R file >> --- >> .onUnload <- function(libpath) >> library.dynam.unload("test2", libpath) >> --- >> >> so the code should be unloaded. But it appears that it is not from >> errors when I explicitly unload the test2.so it does not through a >> segfault. Why would this be happening? and how do I circumvent it. >> >> thanks, >> Andrew >> >> >> On Fri, Nov 12, 2010 at 3:32 PM, Prof Brian Ripley >> <rip...@stats.ox.ac.uk> wrote: >>> On Fri, 12 Nov 2010, Andrew Redd wrote: >>> >>>> I have a package that I'm developing that I need to unload the >>>> library. Long story short I figured out that the leaving the compiled >>>> code loaded lead to a segmentation fault, but unloading the code will >>>> fix it. I've read the documentation and it appears that there are >>>> several ways to do this? What is the popper accepted current standard >>>> for unloading compiled code? >>> >>> Depends how you loaded it: you basically reverse the process. >>> >>>> The options as I understand them are: >>>> 1. dyn.unload >>>> 2. library.dynam.unload >>>> used with either >>>> A. .Last.lib >>>> B. .onUnload >>>> >>>> If it makes a difference my package does use a NAMESPACE so the >>>> package is loaded through useDynLib. >>> >>> So you need an .onUnload action calling library.dynam.unload. >>> >>> Slightly longer version: you need the DLL loaded whilst the namepace is in >>> use, so it has to be in .onUnload, and useDynLib calls library.dynam so you >>> need library.dynam.unload to do the housekeeping around dyn.unload which >>> matches what library.dynam does around dyn.load. >>> >>> There are quite a lot of examples to look at, including in R itself. MASS is >>> one example I've just checked. >>> >>> Having said all that, my experience is that unloading the DLL often does not >>> help if you need to load it again (and that is why e.g. tcltk does not >>> unload its DLL). >>> >>>> Thanks, >>>> Andrew Redd >>>> >>>> ______________________________________________ >>>> R-devel@r-project.org mailing list >>>> https://stat.ethz.ch/mailman/listinfo/r-devel >>>> >>> >>> -- >>> Brian D. Ripley, rip...@stats.ox.ac.uk >>> Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ >>> University of Oxford, Tel: +44 1865 272861 (self) >>> 1 South Parks Road, +44 1865 272866 (PA) >>> Oxford OX1 3TG, UK Fax: +44 1865 272595 >>> >> > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel