### Description See `lock_hash` in `h_table.c`:
```C void lock_hash(int i) { int mypid;
mypid = my_pid(); if (likely(atomic_get(&_tm_table->entries[i].locker_pid) != mypid)) { lock(&_tm_table->entries[i].mutex); atomic_set(&_tm_table->entries[i].locker_pid, mypid); } else { /* locked within the same process that called us*/ _tm_table->entries[i].rec_lock_level++; } } ```
Flowing lines of code do not guarantee atomicity and I think it is not safe: * atomic_get(&_tm_table->entries[i].locker_pid) != mypid * lock(&_tm_table->entries[i].mutex) * atomic_set(&_tm_table->entries[i].locker_pid, mypid)
Would you mind solving my confusion?
If you want to discuss about internal design and C code of Kamailio, use sr-dev@lists.kamailio.org mailing list. The issue tracker is not used as a discussion forum, it is only for reporting bugs in the C code.
Closed #3083.