Re #1994 (misc): Don't try to resolve a DNS SRV query that is already considered resolved.

Thanks to Richard Mudgett for the patch.



git-svn-id: https://svn.pjsip.org/repos/pjproject/trunk@5559 74dad513-b988-da41-8d7b-12977e46ad98
remotes/origin/2.7.x
Riza Sulistyo 8 years ago
parent 99da85642d
commit 1a18efe912

@ -407,8 +407,9 @@ static void build_server_entries(pj_dns_srv_async_query *query_job,
for (i=0; i<query_job->srv_cnt; ++i) {
pj_in_addr addr;
pj_in6_addr addr6;
unsigned cnt = query_job->srv[i].addr_cnt;
if (query_job->srv[i].addr_cnt != 0) {
if (cnt != 0) {
/* IP address already resolved */
continue;
}
@ -417,7 +418,6 @@ static void build_server_entries(pj_dns_srv_async_query *query_job,
pj_inet_pton(pj_AF_INET(), &query_job->srv[i].target_name,
&addr) == PJ_SUCCESS)
{
unsigned cnt = query_job->srv[i].addr_cnt;
pj_sockaddr_init(pj_AF_INET(), &query_job->srv[i].addr[cnt],
NULL, query_job->srv[i].port);
query_job->srv[i].addr[cnt].ipv4.sin_addr = addr;
@ -427,7 +427,6 @@ static void build_server_entries(pj_dns_srv_async_query *query_job,
pj_inet_pton(pj_AF_INET6(), &query_job->srv[i].target_name,
&addr6) == PJ_SUCCESS)
{
unsigned cnt = query_job->srv[i].addr_cnt;
pj_sockaddr_init(pj_AF_INET6(), &query_job->srv[i].addr[cnt],
NULL, query_job->srv[i].port);
query_job->srv[i].addr[cnt].ipv6.sin6_addr = addr6;
@ -480,6 +479,15 @@ static pj_status_t resolve_hostnames(pj_dns_srv_async_query *query_job)
for (i=0; i<query_job->srv_cnt; ++i) {
struct srv_target *srv = &query_job->srv[i];
if (srv->addr_cnt != 0) {
/*
* This query is already counted as resolved because of the
* additional records in the SRV response or the target name
* is an IP address exception in build_server_entries().
*/
continue;
}
PJ_LOG(5, (query_job->objname,
"Starting async DNS A query_job for %.*s",
(int)srv->target_name.slen,
@ -493,7 +501,7 @@ static pj_status_t resolve_hostnames(pj_dns_srv_async_query *query_job)
status = PJ_SUCCESS;
/* Start DNA A record query */
/* Start DNS A record query */
if ((query_job->option & PJ_DNS_SRV_RESOLVE_AAAA_ONLY) == 0)
{
if ((query_job->option & PJ_DNS_SRV_RESOLVE_AAAA) != 0) {
@ -511,7 +519,7 @@ static pj_status_t resolve_hostnames(pj_dns_srv_async_query *query_job)
&srv->common, &srv->q_a);
}
/* Start DNA AAAA record query */
/* Start DNS AAAA record query */
if (status == PJ_SUCCESS &&
(query_job->option & PJ_DNS_SRV_RESOLVE_AAAA) != 0)
{

@ -422,7 +422,8 @@ PJ_DEF(pj_status_t) pjsip_tx_data_create( pjsip_tpmgr *mgr,
tdata = PJ_POOL_ZALLOC_T(pool, pjsip_tx_data);
tdata->pool = pool;
tdata->mgr = mgr;
pj_memcpy(tdata->obj_name, pool->obj_name, PJ_MAX_OBJ_NAME);
pj_ansi_snprintf(tdata->obj_name, sizeof(tdata->obj_name), "tdta%p", tdata);
pj_memcpy(pool->obj_name, tdata->obj_name, sizeof(pool->obj_name));
status = pj_atomic_create(tdata->pool, 0, &tdata->ref_cnt);
if (status != PJ_SUCCESS) {

Loading…
Cancel
Save