pjsip: race condition in registrar

While handling a registration request a race condition could occur if/when two+
clients registered at the same time.  This happened when one request obtained a
copy of the current contacts for an AOR and another request did the same before
the first request updated.  Thus the second would update and overwrite the first
(or vice-versa depending on which actually updated first).  In the case of it
being the same contact two "add" events would be raised.

pjsip registration handling is now serialized to alleviate this issue.

(closes issue AST-1213)
Reported by: John Bigelow
Review: https://reviewboard.asterisk.org/r/2860/


git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/12@399897 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
Kevin Harwell
2013-09-26 18:48:25 +00:00
parent 16d449ef38
commit a8b4e59dbc
4 changed files with 383 additions and 124 deletions

View File

@@ -1478,6 +1478,24 @@ void ast_sip_report_auth_success(struct ast_sip_endpoint *endpoint, pjsip_rx_dat
*/
void ast_sip_report_auth_challenge_sent(struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata, pjsip_tx_data *tdata);
/*!
* \brief Send a security event notification for when a request is not supported
*
* \param endpoint Pointer to the endpoint in use
* \param rdata Received message
* \param req_type the type of request
*/
void ast_sip_report_req_no_support(struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata,
const char* req_type);
/*!
* \brief Send a security event notification for when a memory limit is hit.
*
* \param endpoint Pointer to the endpoint in use
* \param rdata Received message
*/
void ast_sip_report_mem_limit(struct ast_sip_endpoint *endpoint, pjsip_rx_data *rdata);
void ast_sip_initialize_global_headers(void);
void ast_sip_destroy_global_headers(void);