res_pjsip contact: Lock expiration/addition of contacts
authorGeorge Joseph <george.joseph@fairview5.com>
Fri, 1 Apr 2016 18:30:56 +0000 (12:30 -0600)
committerJoshua Colp <jcolp@digium.com>
Mon, 11 Apr 2016 18:00:27 +0000 (13:00 -0500)
commita621dd5e963dfef65656d78d1cd212a17245055d
treeddb29889af0ddc8fca1b253cd17a4d88d55b3029
parent44fba00ca469391a113bc219ef8e5dab2aff105c
res_pjsip contact:  Lock expiration/addition of contacts

Contact expiration can occur in several places:  res_pjsip_registrar,
res_pjsip_registrar_expire, and automatically when anyone calls
ast_sip_location_retrieve_aor_contact.  At the same time, res_pjsip_registrar
may also be attempting to renew or add a contact.  Since none of this was locked
it was possible for one thread to be renewing a contact and another thread to
expire it immediately because it was working off of stale data.  This was the
casue of intermittent registration/inbound/nominal/multiple_contacts test
failures.

Now, the new named lock functionality is used to lock the aor during contact
expire and add operations and res_pjsip_registrar_expire now checks the
expiration with the lock held before deleting the contact.

ASTERISK-25885 #close
Reported-by: Josh Colp

Change-Id: I83d413c46a47796f3ab052ca3b349f21cca47059
include/asterisk/res_pjsip.h
res/res_pjsip/location.c
res/res_pjsip_registrar.c
res/res_pjsip_registrar_expire.c