From b4ed8ad0508e549043bdf3fded9408fcf4d1a878 Mon Sep 17 00:00:00 2001 From: Liong Sauw Ming Date: Wed, 27 Feb 2013 06:44:44 +0000 Subject: Fixed #1626: Assertion when remote sends re-INVITE with less media Included in the fix is sipp testing scenario. git-svn-id: http://svn.pjsip.org/repos/pjproject/trunk@4373 74dad513-b988-da41-8d7b-12977e46ad98 --- pjsip/src/pjsua-lib/pjsua_media.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'pjsip') diff --git a/pjsip/src/pjsua-lib/pjsua_media.c b/pjsip/src/pjsua-lib/pjsua_media.c index bc979153..3b9210b2 100644 --- a/pjsip/src/pjsua-lib/pjsua_media.c +++ b/pjsip/src/pjsua-lib/pjsua_media.c @@ -1457,12 +1457,12 @@ on_return: /* Clean up media transports in provisional media that is not used * by call media. */ -void pjsua_media_prov_clean_up(pjsua_call_id call_id) +static void media_prov_clean_up(pjsua_call_id call_id, int idx) { pjsua_call *call = &pjsua_var.calls[call_id]; unsigned i; - for (i = 0; i < call->med_prov_cnt; ++i) { + for (i = idx; i < call->med_prov_cnt; ++i) { pjsua_call_media *call_med = &call->media_prov[i]; unsigned j; pj_bool_t used = PJ_FALSE; @@ -1489,6 +1489,11 @@ void pjsua_media_prov_clean_up(pjsua_call_id call_id) } } +void pjsua_media_prov_clean_up(pjsua_call_id call_id) +{ + media_prov_clean_up(call_id, 0); +} + pj_status_t pjsua_media_channel_init(pjsua_call_id call_id, pjsip_role_e role, @@ -1902,6 +1907,8 @@ pj_status_t pjsua_media_channel_create_sdp(pjsua_call_id call_id, if (rem_sdp && mi >= rem_sdp->media_count) { /* Remote might have removed some media lines. */ + media_prov_clean_up(call->index, rem_sdp->media_count); + call->med_prov_cnt = rem_sdp->media_count; break; } -- cgit v1.2.3