[Rd] unloading compiled code.

Andrew Redd amredd at gmail.com
Tue Nov 16 21:51:10 CET 2010


so should I use reg.finalizer or overwrite .Last()?  If I use
reg.finalizer, what should be the environment that I specify?  The
straight forward solution would be to have a hook .onExit that a
package could specify to make sure  that the code was unloaded before
the program terminates, that way I don't overwrite .Last if if has
another purpose.

-Andrew

On Tue, Nov 16, 2010 at 11:27 AM, Charles C. Berry <cberry at tajo.ucsd.edu> wrote:
> 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