OK, so one thing I've noticed is that it doesn't seem to take concurrency into 
account. Previously the linked lists were created at startup before Kamailio 
forks and then left alone, but modifying a linked list during runtime with 
multiple processes accessing the shared memory simultaneously is not safe. 
There are ways to make this safe using atomic ops and CAS (not sure if Kamailio 
really supports this), or alternatively locking must be used. This would also 
make it possible (and preferable) to support full deletion of allocated structs 
(sets and nodes) instead of just marking them as deleted.

The var rtpp_set_list deserves special mention as it's initialized to NULL and 
only updated during startup if any proxy sets are actually defined. If this is 
not the case, then the var will remain NULL. A later reload from DB would then 
cause the MI process to allocate all the structs and would set rtpp_set_list to 
non-NULL, but the other processes won't see this change as the var itself is 
not in shared memory (only its contents are).

As a minor note, Kamailio provides the macro STR_EQ(), which does the same 
thing as str_cmp().

---
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/429#issuecomment-171688307
_______________________________________________
sr-dev mailing list
[email protected]
http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev

Reply via email to