From: Kevin Harwell Date: Thu, 9 Jan 2014 16:49:55 +0000 (+0000) Subject: res_rtp_asterisk: Fails to resume WebRTC call from hold X-Git-Tag: 11.8.0-rc1~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dee9ce4a0bf47b5fd18932ffb46a8fa79397cf50;p=thirdparty%2Fasterisk.git res_rtp_asterisk: Fails to resume WebRTC call from hold In ast_rtp_ice_start if the ice session create check list failed, start check was never initiated and ice_started was never set to true. Upon re-entering the function (for instance, [un]hold) it would try to create the check list again with duplicate remote candidates. Fixed so that if the create check list fails the necessary data structures are properly re-initialized for any subsequent retries. Note, it was decided to not stop ice support (by calling ast_rtp_ice_stop) on a check list failure because it possible things might still work. However, a debug message was added to help with any future troubleshooting. (closes issue ASTERISK-22911) Reported by: Vytis Valentinavičius Patches: works_on_my_machine.patch uploaded by xytis (license 6558) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/11@405234 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index a8d6f8c7d7..3d195d846f 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -554,7 +554,17 @@ static void ast_rtp_ice_start(struct ast_rtp_instance *instance) pj_timer_heap_poll(timerheap, NULL); rtp->ice_started = 1; rtp->strict_rtp_state = STRICT_RTP_OPEN; + return; } + + /* even though create check list failed don't stop ice as + it might still work */ + ast_debug(1, "Failed to create ICE session check list\n"); + /* however we do need to reset remote candidates since + this function may be re-entered */ + ao2_ref(rtp->remote_candidates, -1); + rtp->remote_candidates = NULL; + rtp->ice->rcand_cnt = rtp->ice->clist.count = 0; } static void ast_rtp_ice_stop(struct ast_rtp_instance *instance)