The library is completely multithreaded with respect to handling headers and header values. Multiple application threads can work on the same header of a message. When the stack or the application deletes a header or one of the values in a header, the stack marks the header as deleted. Headers marked as deleted are not available via lookups.
Calling the sip_free_msg() function to free a SIP message deletes the message if the reference count for the message falls to zero. You can increment the reference count on a message by using the sip_hold_msg() function.