summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiong Sauw Ming <ming@teluu.com>2011-09-22 04:24:56 +0000
committerLiong Sauw Ming <ming@teluu.com>2011-09-22 04:24:56 +0000
commit1a1575155bfcdce36776bb837242e571819c164c (patch)
tree68d2b29900a06d4f6518e8c3dab137338b140037
parentf3b7770abb691cfa4fc39ec4a34337caa520bc36 (diff)
Re #1266: Fixed crash when accepting incoming call.
git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3767 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjsip/include/pjsua-lib/pjsua_internal.h1
-rw-r--r--pjsip/src/pjsua-lib/pjsua_media.c13
2 files changed, 11 insertions, 3 deletions
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;