Re: [Rd] getNativeSymbolInfo("user_unif_rand") returns different results on windows and linux

From: Renaud Gaujoux <renaud_at_mancala.cbio.uct.ac.za>
Date: Tue, 23 Aug 2011 18:41:31 +0200

Hi Martin,

oups... I indeed had not seen this reply (maybe I should drink less water). Thank you and sorry for the gross bump.

Duncan, thank you for the work around. A cache issue makes sense as shown by the sample code in my bump-post. The cache could be updated when loading a new DLL, by looking up it symbols against the cache.

Another issue is illustrated by the following calls:

library(rstream)
getNativeSymbolInfo("user_unif_rand", "rstream") getNativeSymbolInfo("user_unif_rand", "rstream")

Although one specifies the package here, the results are different (see below: the first returns the complete information, the second has a NULL element package).

I noticed other issues which makes very difficult to predict which DLL will actually be resolved (e.g. when one plays with loading/unloading packages that provides the hook), but I guess caching is behind all these.

Renaud

################

 > library(rstream)
 > getNativeSymbolInfo("user_unif_rand", "rstream") $name
[1] "user_unif_rand"

$address
<pointer: 0x6ee41280>
attr(,"class")
[1] "NativeSymbol"

$package
DLL name: rstream
Filename: C:/Program

         Files/R/R-2.13.1/library/rstream/libs/i386/rstream.dll Dynamic lookup: TRUE

attr(,"class")
[1] "NativeSymbolInfo"
 > getNativeSymbolInfo("user_unif_rand", "rstream") $name
[1] "user_unif_rand"

$address
<pointer: 0x6ee41280>
attr(,"class")
[1] "NativeSymbol"

$package
NULL attr(,"class")
[1] "NativeSymbolInfo"

On 23/08/2011 17:58, Martin Morgan wrote:
> Hi Renaud -- did you miss this
>
> https://stat.ethz.ch/pipermail/r-devel/2011-August/061812.html
>
> ? Martin
>
> On 08/23/2011 07:40 AM, Renaud Gaujoux wrote:
>> Hi,
>>
>> sorry to bump this post but I did not get any reply on this puzzling
>> issue, which looks important though.
>>
>> While investigating the issue it came out that the value returned by
>> getNativeSymbolInfo('user_unif_rand') (on Windows XP) seems to depend on
>> whether it has already been called on the same symbol (see test code
>> below. Each sequence needs to be run on on a fresh R session).
>>
>> Things works perfectly under Linux.
>>
>> Thank you for any explanation on the matter.
>>
>> Renaud
>>
>> ########## SEQUENCE 1 ##################
>> library(rstream)
>> getNativeSymbolInfo('user_unif_rand')
>> # this returns complete info pointing to rstream's hook
>> #### RESULT
>> $name
>> [1] "user_unif_rand"
>>
>> $address
>> <pointer: 0x6ee41280>
>> attr(,"class")
>> [1] "NativeSymbol"
>>
>> $package
>> DLL name: rstream
>> Filename: C:/Program
>> Files/R/R-2.13.1/library/rstream/libs/i386/rstream.dll
>> Dynamic lookup: TRUE
>>
>> attr(,"class")
>> [1] "NativeSymbolInfo"
>> ####
>>
>> # call again getNativeSymbolInfo
>> getNativeSymbolInfo('user_unif_rand')
>> # this returns INcomplete info pointing to rstream's hook
>> ### RESULT
>> $name
>> [1] "user_unif_rand"
>>
>> $address
>> <pointer: 0x6ee41280>
>> attr(,"class")
>> [1] "NativeSymbol"
>>
>> $package
>> NULL
>>
>> attr(,"class")
>> [1] "NativeSymbolInfo"
>> ############################
>>
>>
>> ########## SEQUENCE 2 ##################
>> library(rstream)
>> library(rlecuyer)
>> getNativeSymbolInfo('user_unif_rand')
>> # this returns complete info pointing to relcuyer's hook
>> ########## RESULT ##################
>> $name
>> [1] "user_unif_rand"
>>
>> $address
>> <pointer: 0x6bb84fb8>
>> attr(,"class")
>> [1] "NativeSymbol"
>>
>> $package
>> DLL name: rlecuyer
>> Filename: C:/Program
>> Files/R/R-2.13.1/library/rlecuyer/libs/i386/rlecuyer.dll
>> Dynamic lookup: TRUE
>>
>> attr(,"class")
>> [1] "NativeSymbolInfo"
>> ############################
>>
>> ########## SEQUENCE 3 ##################
>> ####### Load library that provides a hook for user_unif_rand
>> library(rstream)
>> getNativeSymbolInfo('user_unif_rand')
>> # this returns complete info pointing to rstream's hook
>> ## RESULT ##
>> $name
>> [1] "user_unif_rand"
>>
>> $address
>> <pointer: 0x6ee41280>
>> attr(,"class")
>> [1] "NativeSymbol"
>>
>> $package
>> DLL name: rstream
>> Filename: C:/Program
>> Files/R/R-2.13.1/library/rstream/libs/i386/rstream.dll
>> Dynamic lookup: TRUE
>>
>> attr(,"class")
>> [1] "NativeSymbolInfo"
>> ##
>>
>> ####### Load other library that provides the hook
>> library(rlecuyer)
>> getNativeSymbolInfo('user_unif_rand')
>> # this returns INcomplete info pointing to rstream's hook
>> ## RESULT ##
>> $name
>> [1] "user_unif_rand"
>>
>> $address
>> <pointer: 0x6ee41280>
>> attr(,"class")
>> [1] "NativeSymbol"
>>
>> $package
>> NULL
>>
>> attr(,"class")
>> [1] "NativeSymbolInfo"
>> ############################
>>
>>
>> > sessionInfo()
>> R version 2.13.1 (2011-07-08)
>> Platform: i386-pc-mingw32/i386 (32-bit)
>>
>> locale:
>> [1] LC_COLLATE=English_South Africa.1252 LC_CTYPE=English_South
>> Africa.1252
>> [3] LC_MONETARY=English_South Africa.1252 LC_NUMERIC=C
>> [5] LC_TIME=English_South Africa.1252
>>
>> attached base packages:
>> [1] stats graphics grDevices utils datasets methods base
>>
>> other attached packages:
>> [1] rlecuyer_0.3-1 rstream_1.3.1
>>
>>
>>
>> ###
>>
>> UNIVERSITY OF CAPE TOWN
>> This e-mail is subject to the UCT ICT policies and e-mai...{{dropped:5}}
>>
>> ______________________________________________
>> R-devel_at_r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

###

UNIVERSITY OF CAPE TOWN This e-mail is subject to the UCT ICT policies and e-mai...{{dropped:9}}



R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Tue 23 Aug 2011 - 16:43:42 GMT

This quarter's messages: by month, or sorted: [ by date ] [ by thread ] [ by subject ] [ by author ]

All messages

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Tue 23 Aug 2011 - 21:50:21 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive