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