From 2454505d5a1d8e8d44a1ba7a5bcdd260ad4720c0 Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Fri, 14 Nov 2014 14:40:17 +0000 Subject: 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 --- res/res_pjsip_session.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'res/res_pjsip_session.c') 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) { -- cgit v1.2.3