[sr-dev] Thread safety of global variables used in app_perl

Daniel-Constantin Mierla miconda at gmail.com
Fri Oct 14 18:59:13 CEST 2016


Hello,

it is a perl interpreter per process, otherwise it will need a dedicated
process for it with some interprocess communication with the other
worker processes and I haven't seen that in the code, in the few moments
I was working on this module.

Cheers,
Daniel

On 14/10/16 16:14, Alex Balashov wrote:
> Hi Torrey,
>
> I don't think that's how the app_perl module works. I believe it
> spawns a single instance of the interpreter that is shared among the
> processes. I could be mistaken, but that's how it looks from the
> module code.
>
> On 10/14/2016 03:22 AM, Torrey Searle wrote:
>
>> My experience with app_perl is that global variables are not shared
>> between processes.  So if you have 10 kamailio processes you would have
>> 10 different %hash with different values.  So it is thread safe, but
>> perhaps isn't what you want.
>>
>> Torrey
>>
>> On 13 October 2016 at 23:15, Alex Balashov <abalashov at evaristesys.com
>> <mailto:abalashov at evaristesys.com>> wrote:
>>
>>     I meant a global Perl variable -- one that would persist in a
>>     persistent interpreter. Specifically, a "package variable" of
>> this type:
>>
>>        our %hash = ();
>>
>>
>>     On 10/13/2016 04:26 PM, Daniel-Constantin Mierla wrote:
>>
>>         Hello,
>>
>>         is it about a global variable defined inside the perl script or
>>         you mean
>>         kamailio.cfg variables? The terminology you used might be clear
>>         for Perl
>>         guys, but as I am not one, I want to clarify it...
>>
>>         As generic remarks -- kamailio is multi-process application,
>> so each
>>         child is a process, not a thread. Each process has its own
>> private
>>         memory space, so a global kamailio.cfg variable such as
>> $var(x) is
>>         defined in each process and each process has access to the one
>>         specific
>>         to it. There are shared memory variables, like $shv(z) that all
>>         processes can access and change, requiring synchronization to
>>         avoid races.
>>
>>         Cheers,
>>         Daniel
>>
>>
>>         On 13/10/16 19:13, Alex Balashov wrote:
>>
>>             Hi,
>>
>>             Given the presence of a global (e.g. "our") package variable
>>             in an
>>             embedded Perl script used through app_perl, is there any
>>             implicit
>>             thread safety?
>>
>>             That is to say, can a Perl function invoked by one SIP
>>             worker reset
>>             the value of a global while another instance of the function
>>             invoked
>>             by a different SIP worker is accessing it?
>>
>>             And if so, is it safe to use generic perlthr locking to
>>             avoid this?
>>
>>             Thanks!
>>
>>             -- Alex
>>
>>
>>
>>
>>     --
>>     Alex Balashov | Principal | Evariste Systems LLC
>>
>>     Tel: +1-706-510-6800 (direct) / +1-800-250-5920 (toll-free)
>>     Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
>>
>>     _______________________________________________
>>     sr-dev mailing list
>>     sr-dev at lists.sip-router.org <mailto:sr-dev at lists.sip-router.org>
>>     http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>>     <http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev>
>>
>>
>>
>>
>> _______________________________________________
>> sr-dev mailing list
>> sr-dev at lists.sip-router.org
>> http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
>>
>
>

-- 
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio Advanced Training, Berlin, Oct 24-26, 2016 - http://www.asipto.com




More information about the sr-dev mailing list