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.