summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNanang Izzuddin <nanang@teluu.com>2010-12-02 06:12:19 +0000
committerNanang Izzuddin <nanang@teluu.com>2010-12-02 06:12:19 +0000
commitab91191ef015d89ca793f34187d5560d314bd1f2 (patch)
tree82e0d7029c6e0814b9c0d88e7b566d0eafc47beb
parentef71062d8f77cc5eb03193ff47dbe7cbfe95473d (diff)
Fix #1171, fixed issues in pjmedia_codec_mgr_set_default_param():
- updated the releasing of the old pool to be done after the new codec param is copied - fixed the double dec_fmtp copy loop, one of them should be enc_fmtp copy loop instead git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@3380 74dad513-b988-da41-8d7b-12977e46ad98
-rw-r--r--pjmedia/src/pjmedia/codec.c23
1 files changed, 15 insertions, 8 deletions
diff --git a/pjmedia/src/pjmedia/codec.c b/pjmedia/src/pjmedia/codec.c
index 39d77834..323b0f59 100644
--- a/pjmedia/src/pjmedia/codec.c
+++ b/pjmedia/src/pjmedia/codec.c
@@ -535,7 +535,7 @@ PJ_DEF(pj_status_t) pjmedia_codec_mgr_set_default_param(
{
unsigned i;
pjmedia_codec_id codec_id;
- pj_pool_t *pool;
+ pj_pool_t *pool, *old_pool = NULL;
struct pjmedia_codec_desc *codec_desc = NULL;
pjmedia_codec_default_param *p;
@@ -560,10 +560,12 @@ PJ_DEF(pj_status_t) pjmedia_codec_mgr_set_default_param(
return PJMEDIA_CODEC_EUNSUP;
}
- /* If codec param is previously set, release codec param pool */
+ /* If codec param is previously set, reset the codec param but release
+ * the codec param pool later after the new param is set (ticket #1171).
+ */
if (codec_desc->param) {
pj_assert(codec_desc->param->pool);
- pj_pool_release(codec_desc->param->pool);
+ old_pool = codec_desc->param->pool;
codec_desc->param = NULL;
}
@@ -572,6 +574,8 @@ PJ_DEF(pj_status_t) pjmedia_codec_mgr_set_default_param(
*/
if (NULL == param) {
pj_mutex_unlock(mgr->mutex);
+ if (old_pool)
+ pj_pool_release(old_pool);
return PJ_SUCCESS;
}
@@ -590,15 +594,18 @@ PJ_DEF(pj_status_t) pjmedia_codec_mgr_set_default_param(
pj_strdup(pool, &p->param->setting.dec_fmtp.param[i].val,
&param->setting.dec_fmtp.param[i].val);
}
- for (i = 0; i < param->setting.dec_fmtp.cnt; ++i) {
- pj_strdup(pool, &p->param->setting.dec_fmtp.param[i].name,
- &param->setting.dec_fmtp.param[i].name);
- pj_strdup(pool, &p->param->setting.dec_fmtp.param[i].val,
- &param->setting.dec_fmtp.param[i].val);
+ for (i = 0; i < param->setting.enc_fmtp.cnt; ++i) {
+ pj_strdup(pool, &p->param->setting.enc_fmtp.param[i].name,
+ &param->setting.enc_fmtp.param[i].name);
+ pj_strdup(pool, &p->param->setting.enc_fmtp.param[i].val,
+ &param->setting.enc_fmtp.param[i].val);
}
pj_mutex_unlock(mgr->mutex);
+ if (old_pool)
+ pj_pool_release(old_pool);
+
return PJ_SUCCESS;
}