diff -rupN pjproject-2.5.5/pjnath/src/pjnath/ice_strans.c pjproject-2.5.5-new/pjnath/src/pjnath/ice_strans.c --- pjproject-2.5.5/pjnath/src/pjnath/ice_strans.c 2016-06-29 07:53:10.000000000 +0200 +++ pjproject-2.5.5-new/pjnath/src/pjnath/ice_strans.c 2017-01-05 14:15:09.160519076 +0100 @@ -1297,6 +1297,9 @@ PJ_DEF(pj_status_t) pj_ice_strans_start_ pj_sockaddr addrs[PJ_ICE_ST_MAX_CAND]; unsigned j, count=0; + if (!comp->turn[n].sock) + continue; + /* Gather remote addresses for this component */ for (j=0; jice_st); + } else if ((old_state == PJ_TURN_STATE_RESOLVING || old_state == PJ_TURN_STATE_ALLOCATING) && + new_state >= PJ_TURN_STATE_DEALLOCATING) + { + pj_ice_sess_cand *cand = NULL; + unsigned i; + + /* DNS resolution has failed! */ + ++comp->turn[tp_idx].err_cnt; + + /* Unregister ourself from the TURN relay */ + pj_turn_sock_set_user_data(turn_sock, NULL); + comp->turn[tp_idx].sock = NULL; + + /* Wait until initialization completes */ + pj_grp_lock_acquire(comp->ice_st->grp_lock); + + /* Find relayed candidate in the component */ + for (i=0; icand_cnt; ++i) { + if (comp->cand_list[i].type == PJ_ICE_CAND_TYPE_RELAYED && + comp->cand_list[i].transport_id == data->transport_id) + { + cand = &comp->cand_list[i]; + break; + } + } + pj_assert(cand != NULL); + + pj_grp_lock_release(comp->ice_st->grp_lock); + + cand->status = old_state == PJ_TURN_STATE_RESOLVING ? PJ_ERESOLVE : PJ_EINVALIDOP; + + sess_init_update(comp->ice_st); + } else if (new_state >= PJ_TURN_STATE_DEALLOCATING) { pj_turn_session_info info; diff -rupN pjproject-2.5.5/pjnath/src/pjnath/turn_session.c pjproject-2.5.5-new/pjnath/src/pjnath/turn_session.c --- pjproject-2.5.5/pjnath/src/pjnath/turn_session.c 2016-07-13 11:57:26.000000000 +0200 +++ pjproject-2.5.5-new/pjnath/src/pjnath/turn_session.c 2017-01-05 14:15:09.160519076 +0100 @@ -651,7 +651,7 @@ PJ_DEF(pj_status_t) pj_turn_session_set_ PJ_ASSERT_RETURN(default_port>0 && default_port<65536, PJ_EINVAL); sess->default_port = (pj_uint16_t)default_port; - cnt = PJ_TURN_MAX_DNS_SRV_CNT; + cnt = 1; ai = (pj_addrinfo*) pj_pool_calloc(sess->pool, cnt, sizeof(pj_addrinfo));