diff options
author | Mark Michelson <mmichelson@digium.com> | 2014-11-14 14:40:17 +0000 |
---|---|---|
committer | Mark Michelson <mmichelson@digium.com> | 2014-11-14 14:40:17 +0000 |
commit | 2454505d5a1d8e8d44a1ba7a5bcdd260ad4720c0 (patch) | |
tree | c92afa2796b9a1579b931f3b934540a6605bd682 /res/res_pjsip_session.c | |
parent | 49b7a1cbafdc3dc439277701c50c9d85fb48a595 (diff) |
Fix race condition where duplicated requests may be handled by multiple threads.
This is the Asterisk 13 version of the patch. The main difference is in the pubsub
code since it was completely refactored between Asterisk 12 and 13.
Review: https://reviewboard.asterisk.org/r/4175
........
Merged revisions 427841 from http://svn.asterisk.org/svn/asterisk/branches/13
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@427842 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'res/res_pjsip_session.c')
-rw-r--r-- | res/res_pjsip_session.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index d5dc98e9d..ebe321958 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -1416,6 +1416,7 @@ static pjsip_inv_session *pre_session_setup(pjsip_rx_data *rdata, const struct a pjsip_dialog *dlg; pjsip_inv_session *inv_session; unsigned int options = endpoint->extensions.flags; + pj_status_t dlg_status; if (pjsip_inv_verify_request(rdata, &options, NULL, NULL, ast_sip_get_pjsip_endpoint(), &tdata) != PJ_SUCCESS) { if (tdata) { @@ -1425,9 +1426,11 @@ static pjsip_inv_session *pre_session_setup(pjsip_rx_data *rdata, const struct a } return NULL; } - dlg = ast_sip_create_dialog_uas(endpoint, rdata); + dlg = ast_sip_create_dialog_uas(endpoint, rdata, &dlg_status); if (!dlg) { - pjsip_endpt_respond_stateless(ast_sip_get_pjsip_endpoint(), rdata, 500, NULL, NULL, NULL); + if (dlg_status != PJ_EEXISTS) { + pjsip_endpt_respond_stateless(ast_sip_get_pjsip_endpoint(), rdata, 500, NULL, NULL, NULL); + } return NULL; } if (pjsip_inv_create_uas(dlg, rdata, NULL, options, &inv_session) != PJ_SUCCESS) { |