[sr-dev] Thread safety of global variables used in app_perl
Alex Balashov
abalashov at evaristesys.com
Fri Oct 14 19:02:00 CEST 2016
Ah, I see.
The motivation for the question was an attempt to troubleshoot why the value of this hash is occasionally empty.
Every once in a while, it's set to empty and then reloaded from the database (after x many accesses). The thinking was that perhaps another worker is trying to access this value at the same time that it was emptied in a different context.
However, if the interpreter instances are per-process, that theory is probably out. Thank you, Daniel!
On October 14, 2016 12:59:13 PM EDT, Daniel-Constantin Mierla <miconda at gmail.com> wrote:
>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
>
>
>_______________________________________________
>sr-dev mailing list
>sr-dev at lists.sip-router.org
>http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev
-- Alex
--
Principal, Evariste Systems LLC (www.evaristesys.com)
Sent from my Google Nexus.
More information about the sr-dev
mailing list