From eb9ae4f7cba333c4cd188c741a71c1f244071929 Mon Sep 17 00:00:00 2001 From: Richard Mudgett Date: Sat, 4 Feb 2017 16:00:14 -0600 Subject: res_pjsip: Record the serializer earlier on the tdata. When PJPROJECT needs to do a DNS resolution and there is not a cached entry available, the SIP request message goes out on the PJSIP monitor thread instead of the original serializer thread. Thus when the response comes back it does not get processed by the original sending serializer. This patch records the serializer on tdata before passing a request message to PJPROJECT where it can in Asterisk code. There are several places in PJPROJECT for outbound registration and publishing support that would need to record the serializer. Unfortunately, without replacing the PJPROJECT DNS resolver as was done in v14 we cannot fix those without modifying PJPROJECT. Even if we backported the DNS resolver from v14, the outbound registration refresh timer does not go out on a serializer thread but the PJSIP monitor thread. Fortunately, Asterisk's outbound publish support doesn't use the auto refresh timer that would also not go out under the serializer thread. This patch is v13 only. ASTERISK-26669 ASTERISK-26738 Change-Id: I9997b9ed6dbcebd2c37d6a67dc6dcee9c78914a4 --- include/asterisk/res_pjsip.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'include') diff --git a/include/asterisk/res_pjsip.h b/include/asterisk/res_pjsip.h index c97e4b534..d8e172fc5 100644 --- a/include/asterisk/res_pjsip.h +++ b/include/asterisk/res_pjsip.h @@ -1367,6 +1367,16 @@ struct ast_taskprocessor *ast_sip_create_serializer_group_named(const char *name */ struct ast_taskprocessor *ast_sip_get_distributor_serializer(pjsip_rx_data *rdata); +/*! + * \brief Record the task's serializer name on the tdata structure. + * \since 13.15.0 + * + * \param tdata The outgoing message. + * + * \retval PJ_SUCCESS. + */ +pj_status_t ast_sip_record_request_serializer(pjsip_tx_data *tdata); + /*! * \brief Set a serializer on a SIP dialog so requests and responses are automatically serialized * -- cgit v1.2.3