rlm_perl CLONE under freeradius 3.x

Peter Banksia ok balsianok.peter at gmail.com
Sat Apr 25 19:13:20 CEST 2015



> On 25 Apr 2015, at 18:14, Eugene Grosbein <fr at grosbein.net> wrote:
> 
>> On Sat, Apr 25, 2015 at 10:46:05AM +0800, d tbsky wrote:
>> hi:
>>    I am writing rlm_perl script under freeradius 3.0.4 which comes
>> with RHEL 7.1.
>> and I am confused about how thread working with rlm_perl.
>> according to the old message at email list, if I want every radius
>> thread  to have their own unique variable, I should put the variable
>> at "CLONE" function like below:
>> 
>> our ($var);
>> CLONE {
>>   $var = '';
>> }
>> 
>> but after testing, I found even if the variable is not put at the
>> CLONE function, they are still unique to each thread. may I ask what
>> is the correct method to make global thread shared variable and thread
>> unique variable under rlm_perl ?
> 
> All variables are thread unique unless explicitly decrlared ":shared", e.g.:

You are not right. I use rlm_perl module without use threads or use threads::share just

our %cache;

Each radius thread has access to this global variable or can modified it

For me that means, freeradius create only one perl instance, which is shared between radius threads.

> 
> require 5.10.0;
> use threads;
> use threads::shared;
> our $href :shared;
> 
> sub CLONE_SKIP {
>  $href = shared_clone({});
> }
> 
> This way, all threads have access to single hash reference $href,
> so they need to use lock() or similar ways to serialize access to it.
> 
> Simple scalars do not need shared_clone() to initialize, though.
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html



More information about the Freeradius-Users mailing list