[SR-Users] Locking htable entries

Daniel-Constantin Mierla miconda at gmail.com
Thu Jul 19 14:15:07 CEST 2018


... worth mentioning that locking for htable is re-entrant, so it is not
ending into a deadlock when doing:

 - lock slot for $sht(x=>y)

 - read/write $sht(x=>y)

 - unlock slot for $sht(x=>y)

But always do unlock if doing the lock explicitly.

Cheers,
Daniel

On 19.07.18 14:08, Daniel-Constantin Mierla wrote:
> Hello,
>
> readn and write operations are safe, done under mutex locking. So it is
> always safe to do:
>
> $sht(x=>y) = $var(y);
>
> or:
>
> $var(y) = $sht(x=>y);
>
> But there could be operations where you want that the value is not
> changed by another process while doing some operations, like: get the
> value from hash table, test it against some limit and act in different
> ways. For example, you keep active calls per user:
>
> if($sht(ac=>$fU) < 10) {
>    $sht(ac=>$fU) = $sht(ac=>$fU) + 1;
> } else {
>   sl_send_reply("403", "Too many calls");
> }
>
> From the moment you read for IF condition till the moment of increment,
> the CPU can be given to another kamailio process which does same
> operation, reading same value and at the end it gets incremented with 1
> instead with 2, obviously if the value was 9, then one call is allowed
> when it shouldn't be.
>
> So you have to protect the above example by locking the slot for
> $sht(ac=>$fU).
>
> This was a rather simple example, but hopefully clarifies when explicit
> sht lock/unlock is needed.
>
> Cheers,
> Daniel
>
> On 19.07.18 13:50, Alex Balashov wrote:
>> Hi,
>>
>> Sorry if this question has been answered before, but I'm rather puzzled
>> as to the intent behind sht_lock() / sht_unlock().
>>
>> Presumably, "thread"-safe / shm mutex locking is already implemented in
>> htable query and mutation operations, otherwise htable would be unusable in
>> a route script context. 
>>
>> So what is the purpose of this higher-level lock? Is it to create a way
>> to block config script execution in multiple processes as to serialise
>> operations? Why would one want to do this under any ordinary
>> circumstances? Perhaps it is a failure of my imagination...
>>
>> Thanks,
>>
>> -- Alex
>>

-- 
Daniel-Constantin Mierla -- www.asipto.com
www.twitter.com/miconda -- www.linkedin.com/in/miconda
Kamailio World Conference -- www.kamailioworld.com




More information about the sr-users mailing list