diff options
author | Richard Mudgett <rmudgett@digium.com> | 2017-11-09 19:58:12 -0600 |
---|---|---|
committer | Richard Mudgett <rmudgett@digium.com> | 2017-11-15 17:53:29 -0500 |
commit | 22197e11613bd2497429993ae9bf3a7a15c8dd56 (patch) | |
tree | 27e6e455c7494ef9e4eeed54f78ebde0e526f6f5 /channels | |
parent | b8fafd6806ab2684d547074b25a56dd152097341 (diff) |
chan_pjsip.c: Improve answer failure log messages.
* Balanced the session->inv_session refs on answer failure.
Change-Id: I33542d639d37e692cb46550b972a5fcfc3b804b8
Diffstat (limited to 'channels')
-rw-r--r-- | channels/chan_pjsip.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/channels/chan_pjsip.c b/channels/chan_pjsip.c index 0160425e6..e4e8fa586 100644 --- a/channels/chan_pjsip.c +++ b/channels/chan_pjsip.c @@ -672,7 +672,19 @@ static int answer(void *data) pjsip_inv_dec_ref(session->inv_session); #endif - return (status == PJ_SUCCESS) ? 0 : -1; + if (status != PJ_SUCCESS) { + char err[PJ_ERR_MSG_SIZE]; + + pj_strerror(status, err, sizeof(err)); + ast_log(LOG_WARNING,"Cannot answer '%s': %s\n", + ast_channel_name(session->channel), err); + /* + * Return this value so we can distinguish between this + * failure and the threadpool synchronous push failing. + */ + return -2; + } + return 0; } /*! \brief Function called by core when we should answer a PJSIP session */ @@ -680,6 +692,7 @@ static int chan_pjsip_answer(struct ast_channel *ast) { struct ast_sip_channel_pvt *channel = ast_channel_tech_pvt(ast); struct ast_sip_session *session; + int res; if (ast_channel_state(ast) == AST_STATE_UP) { return 0; @@ -700,11 +713,15 @@ static int chan_pjsip_answer(struct ast_channel *ast) can occur between this thread and bridging (specifically when native bridging attempts to do direct media) */ ast_channel_unlock(ast); - if (ast_sip_push_task_synchronous(session->serializer, answer, session)) { - ast_log(LOG_WARNING, "Unable to push answer task to the threadpool. Cannot answer call\n"); + res = ast_sip_push_task_synchronous(session->serializer, answer, session); + if (res) { + if (res == -1) { + ast_log(LOG_ERROR,"Cannot answer '%s': Unable to push answer task to the threadpool.\n", + ast_channel_name(session->channel)); #ifdef HAVE_PJSIP_INV_SESSION_REF - pjsip_inv_dec_ref(session->inv_session); + pjsip_inv_dec_ref(session->inv_session); #endif + } ao2_ref(session, -1); ast_channel_lock(ast); return -1; |