Skip to content
Snippets Groups Projects
Commit e90bb44b authored by Matt Jordan's avatar Matt Jordan Committed by Gerrit Code Review
Browse files

Merge "res_pjsip_rfc3326.c: Fix crash when channel goes away."

parents 4013f9d5 436023a3
No related branches found
No related tags found
No related merge requests found
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include "asterisk/res_pjsip_session.h" #include "asterisk/res_pjsip_session.h"
#include "asterisk/module.h" #include "asterisk/module.h"
#include "asterisk/causes.h" #include "asterisk/causes.h"
#include "asterisk/threadpool.h"
static void rfc3326_use_reason_header(struct ast_sip_session *session, struct pjsip_rx_data *rdata) static void rfc3326_use_reason_header(struct ast_sip_session *session, struct pjsip_rx_data *rdata)
{ {
...@@ -101,9 +102,15 @@ static void rfc3326_add_reason_header(struct ast_sip_session *session, struct pj ...@@ -101,9 +102,15 @@ static void rfc3326_add_reason_header(struct ast_sip_session *session, struct pj
static void rfc3326_outgoing_request(struct ast_sip_session *session, struct pjsip_tx_data *tdata) static void rfc3326_outgoing_request(struct ast_sip_session *session, struct pjsip_tx_data *tdata)
{ {
if ((pjsip_method_cmp(&tdata->msg->line.req.method, &pjsip_bye_method) && if ((pjsip_method_cmp(&tdata->msg->line.req.method, &pjsip_bye_method)
pjsip_method_cmp(&tdata->msg->line.req.method, &pjsip_cancel_method)) || && pjsip_method_cmp(&tdata->msg->line.req.method, &pjsip_cancel_method))
!session->channel) { || !session->channel
/*
* The session->channel has been seen to go away on us between
* checks so we must also be running under the call's serializer
* thread.
*/
|| session->serializer != ast_threadpool_serializer_get_current()) {
return; return;
} }
...@@ -114,7 +121,9 @@ static void rfc3326_outgoing_response(struct ast_sip_session *session, struct pj ...@@ -114,7 +121,9 @@ static void rfc3326_outgoing_response(struct ast_sip_session *session, struct pj
{ {
struct pjsip_status_line status = tdata->msg->line.status; struct pjsip_status_line status = tdata->msg->line.status;
if ((status.code < 300) || !session->channel) { if (status.code < 300
|| !session->channel
|| session->serializer != ast_threadpool_serializer_get_current()) {
return; return;
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment