Date: Sat, 6 Oct 2007 17:07:12 GMT From: Fredrik Lindberg <fli@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 127251 for review Message-ID: <200710061707.l96H7C1a007073@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=127251 Change 127251 by fli@fli_nexus on 2007/10/06 17:06:47 - Probing/annonucing was broken for ipv6. - A few error conditions didn't release the read-lock properly. Affected files ... .. //depot/projects/soc2007/fli-mdns_sd/mdnsd/dbrec.c#9 edit Differences ... ==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/dbrec.c#9 (text+ko) ==== @@ -462,11 +462,13 @@ tmp = realloc(ident, sizeof(char *) * ++i); if (tmp == NULL) - goto dbr_ident_list_fail; + goto dbr_ident_list_fail2; ident[i - 1] = NULL; return (ident); dbr_ident_list_fail: + RW_UNLOCK(dbr, dbr_lock); +dbr_ident_list_fail2: for (j = 0; j < i; j++) free(ident[j]); if (ident != NULL) @@ -1782,6 +1784,7 @@ RW_RLOCK(dbr, dbr_lock); if (!(dr->dr_flags & DR_OK)) { dprintf(DEBUG_DBR, "Record is not ok, not defending"); + RW_UNLOCK(dbr, dbr_lock); return; } @@ -2137,7 +2140,7 @@ struct dbr *dbr; struct md_if *mif; int count = 0; - struct mdns_pkgchain pc; + struct mdns_pkgchain pc, pc6; pac = arg.ptr; MDNS_INIT_ASSERT(pac, pac_magic); @@ -2181,6 +2184,10 @@ mdns_pkgchain_init(&mif->mif_stack, &pc, MDNS_PC_NONE); mdns_pkg_sethdr(&pc, 0, MDNS_HEAD_QUERY | MDNS_HEAD_AA); +#ifdef INET6 + mdns_pkgchain_init(&mif->mif_stack, &pc6, MDNS_PC_NONE); + mdns_pkg_sethdr(&pc6, 0, MDNS_HEAD_QUERY | MDNS_HEAD_AA); +#endif /* * Add all valid records to the packet chain @@ -2188,6 +2195,9 @@ TAILQ_FOREACH_SAFE(dr, &pac->pac_head, dr_pac_next, dr2) { MDNS_INIT_ASSERT(dr, dr_magic); probe_add_rec(&pc, dr, pac->pac_step); +#ifdef INET6 + probe_add_rec(&pc6, dr, pac->pac_step); +#endif count++; } @@ -2195,10 +2205,13 @@ if (count) { oq_enqueue(&mif->mif_oq, &pc, AF_INET, NULL, 0); #ifdef INET6 - oq_enqueue(&mif->mif_oq, &pc, AF_INET6, NULL, 0); + oq_enqueue(&mif->mif_oq, &pc6, AF_INET6, NULL, 0); #endif } mdns_pkgchain_free(&pc); +#ifdef INET6 + mdns_pkgchain_free(&pc6); +#endif if (pac->pac_step++ < 3) { pac->pac_tmr = @@ -2264,9 +2277,9 @@ struct md_if *mif; struct record *r; struct record_res *rr; - struct mdns_rrset *rs; + struct mdns_rrset *rs, *rs2; int delay_time, count = 0; - struct mdns_pkgchain pc; + struct mdns_pkgchain pc, pc6; pac = arg.ptr; MDNS_INIT_ASSERT(pac, pac_magic); @@ -2289,6 +2302,10 @@ mdns_pkgchain_init(&mif->mif_stack, &pc, MDNS_PC_NONE); mdns_pkg_sethdr(&pc, 0, MDNS_HEAD_RESP | MDNS_HEAD_AA); +#ifdef INET6 + mdns_pkgchain_init(&mif->mif_stack, &pc6, MDNS_PC_NONE); + mdns_pkg_sethdr(&pc6, 0, MDNS_HEAD_RESP | MDNS_HEAD_AA); +#endif RW_RLOCK(dbr, dbr_lock); @@ -2313,6 +2330,14 @@ rs->r_datalen = rr->rr_len; rs->r_data = rr->rr_data; mdns_pkg_addanswer(&pc, rs, 0); + +#ifdef INET6 + rs2 = mdns_pkg_getrrset(); + if (rs2 == NULL) + break; + memcpy(rs2, rs, sizeof(struct mdns_rrset)); + mdns_pkg_addanswer(&pc6, rs2, 0); +#endif count++; } } @@ -2323,10 +2348,13 @@ if (count) { oq_enqueue(&mif->mif_oq, &pc, AF_INET, NULL, 0); #ifdef INET6 - oq_enqueue(&mif->mif_oq, &pc, AF_INET6, NULL, 0); + oq_enqueue(&mif->mif_oq, &pc6, AF_INET6, NULL, 0); #endif } mdns_pkgchain_free(&pc); +#ifdef INET6 + mdns_pkgchain_free(&pc6); +#endif if (pac->pac_step < 7) { /* Double the delay time in each step */
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200710061707.l96H7C1a007073>