[Rd] unloading compiled code.

Charles C. Berry cberry at tajo.ucsd.edu
Tue Nov 16 19:27:29 CET 2010


On Tue, 16 Nov 2010, Andrew Redd wrote:

> Just found in the documentation for getHook that packages are not
> unloaded on quit.  How should I force a package to unload on quit?

See

 	?q


HTH,

Chuck

>
> -Andrew
>
> On Tue, Nov 16, 2010 at 10:25 AM, Andrew Redd <amredd at 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 <amredd at 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
>>> <ripley at 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 at r-project.org mailing list
>>>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>>>>
>>>>
>>>> --
>>>> Brian D. Ripley,                  ripley at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>

Charles C. Berry                            Dept of Family/Preventive Medicine
cberry at tajo.ucsd.edu			    UC San Diego
http://famprevmed.ucsd.edu/faculty/cberry/  La Jolla, San Diego 92093-0901



More information about the R-devel mailing list