Date: Sat, 21 Jul 2007 19:22:19 GMT From: Fredrik Lindberg <fli@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 123859 for review Message-ID: <200707211922.l6LJMJDc011146@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=123859 Change 123859 by fli@fli_nexus on 2007/07/21 19:21:40 - Hook up the cache system with the query system, notifies consumers when a record expires. - Fix a resource leak. Affected files ... .. //depot/projects/soc2007/fli-mdns_sd/mdnsd/cache.c#4 edit Differences ... ==== //depot/projects/soc2007/fli-mdns_sd/mdnsd/cache.c#4 (text+ko) ==== @@ -81,11 +81,11 @@ } void -cache_init(struct cache *c) +cache_init(struct cache *c, struct queries *q) { - records_init(&c->c_recs, mdns_c_in); TAILQ_INIT(&c->c_list); + c->c_queries = q; } void @@ -129,9 +129,9 @@ * Adds a resource record to the cache * c - initialized cache structure * rrset - resource record to add + * * If the record is already in cache, its TTL will be reset to the * ttl value specified in the given `rrset'. - * Returns a pointer to the cached resource record. */ int cache_add(struct cache *c, struct mdns_rrset *rrset, struct record_res **new) @@ -194,11 +194,12 @@ cache_del(struct cache *c, struct record_res *rr) { struct cache_res *cr; -#ifdef DEBUG struct record *r = rr->rr_type->rt_record; struct record_type *rt = rr->rr_type; +#ifdef DEBUG time_t rtime = time(NULL); #endif + struct mdns_rrset rs; MDNS_INIT_ASSERT(rr, rr_magic); cr = record_res_getparent(rr); @@ -207,9 +208,20 @@ "attl=%d, rttl=%d, cached=%d", r->r_name, rt->rt_type, rr->rr_len, cr->cr_ttl_abs, cr->cr_ttl_rel, rtime - cr->cr_ctime); + if (c->c_queries != NULL) { + mdns_rrset_name(&rs, r->r_name); + rs.r_ttl = 0; + rs.r_class = mdns_c_in; + rs.r_type = rt->rt_type; + rs.r_data = rr->rr_data; + rs.r_datalen = rr->rr_len; + query_notify(c->c_queries, &rs, 0, 0, 0); + } + MDNS_INIT_ASSERT(cr, cr_magic); dequeue_ttl(c, cr); record_res_del(rr); + record_release(r); MDNS_INIT_UNSET(cr, cr_magic); free(cr); return (0);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200707211922.l6LJMJDc011146>