From 1a1575155bfcdce36776bb837242e571819c164c Mon Sep 17 00:00:00 2001 From: Liong Sauw Ming Date: Thu, 22 Sep 2011 04:24:56 +0000 Subject: Re #1266: Fixed crash when accepting incoming call. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3767 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/include/pjsua-lib/pjsua_internal.h | 1 + pjsip/src/pjsua-lib/pjsua_media.c | 13 ++++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) (limited to 'pjsip') diff --git a/pjsip/include/pjsua-lib/pjsua_internal.h b/pjsip/include/pjsua-lib/pjsua_internal.h index 5c3dd34d..162758ea 100644 --- a/pjsip/include/pjsua-lib/pjsua_internal.h +++ b/pjsip/include/pjsua-lib/pjsua_internal.h @@ -145,6 +145,7 @@ struct pjsua_call struct { pjsip_dialog *dlg; /**< Call dialog. */ pjmedia_sdp_session *rem_sdp;/**< Remote SDP. */ + pj_pool_t *pool_prov;/**< Provisional pool. */ union { struct { unsigned options; /**< Outgoing call options. */ diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index 932fdc8e..626965b5 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -1501,8 +1501,12 @@ static pj_status_t media_channel_init_cb(pjsua_call_id call_id, /* Note: tp may be NULL if this media line is disabled */ if (call_med->tp && call_med->tp_st == PJSUA_MED_TP_IDLE) { - pj_pool_t *tmp_pool = (call->inv? call->inv->pool_prov: - call->async_call.dlg->pool); + pj_pool_t *tmp_pool = call->async_call.pool_prov; + + if (!tmp_pool) { + tmp_pool = (call->inv? call->inv->pool_prov: + call->async_call.dlg->pool); + } status = pjmedia_transport_media_create( call_med->tp, tmp_pool, @@ -1552,7 +1556,6 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, pj_status_t status; PJ_UNUSED_ARG(role); - PJ_UNUSED_ARG(tmp_pool); /* * Note: this function may be called when the media already exists @@ -1651,6 +1654,8 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, } } + call->async_call.pool_prov = tmp_pool; + /* Initialize each media line */ for (mi=0; mi < call->med_cnt; ++mi) { pjsua_call_media *call_med = &call->media[mi]; @@ -1731,6 +1736,8 @@ pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, call->audio_idx, call->index)); if (pending_med_tp) { + /* We shouldn't use temporary pool anymore. */ + call->async_call.pool_prov = NULL; /* We have a pending media transport initialization. */ pj_log_pop_indent(); return PJ_EPENDING; -- cgit v1.2.3