rlm_perl CLONE under freeradius 3.x

Eugene Grosbein fr at grosbein.net
Sat Apr 25 18:14:02 CEST 2015


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.:

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.


More information about the Freeradius-Users mailing list