Deep Cleaning LSDB
diff --git a/nlsr.c b/nlsr.c
index 37ac91e..11605a1 100644
--- a/nlsr.c
+++ b/nlsr.c
@@ -1079,20 +1079,18 @@
printf("Freeing Allocated Memory....\n");
}
writeLogg(__FILE__,__FUNCTION__,__LINE__,"Freeing Allocated Memory....\n");
+
/* Destroying all face created by nlsr in CCND */
destroy_all_face_by_nlsr();
destroy_faces_for_nbrs();
- /* Destroying every hash table attached to each neighbor in ADL before destorying ADL */
- //hashtb_destroy(&nlsr->adl);
destroy_adl();
- //hashtb_destroy(&nlsr->npl);
destroy_npl();
-
- //hashtb_destroy(&nlsr->pit_alsa);
- hashtb_destroy(&nlsr->lsdb->name_lsdb);
- hashtb_destroy(&nlsr->lsdb->adj_lsdb);
- hashtb_destroy(&nlsr->lsdb->cor_lsdb);
+ destroy_lsdb();
+
+ //hashtb_destroy(&nlsr->lsdb->name_lsdb);
+ //hashtb_destroy(&nlsr->lsdb->adj_lsdb);
+ //hashtb_destroy(&nlsr->lsdb->cor_lsdb);
int i, npt_element,rt_element;
struct npt_entry *ne;
@@ -1131,8 +1129,6 @@
close(nlsr->nlsr_api_server_sock_fd);
ccn_destroy(&nlsr->ccn);
- free(nlsr->lsdb->lsdb_version);
- free(nlsr->lsdb);
free(nlsr->router_name);
if ( nlsr->debugging )
{
@@ -1200,7 +1196,6 @@
nlsr->adl=hashtb_create(sizeof(struct ndn_neighbor), NULL);
nlsr->npl = hashtb_create(sizeof(struct name_prefix_list_entry), NULL);
- //nlsr->pit_alsa = hashtb_create(sizeof(struct pending_interest), NULL);
nlsr->npt = hashtb_create(sizeof(struct npt_entry), NULL);
nlsr->routing_table = hashtb_create(sizeof(struct routing_table_entry), NULL);
diff --git a/nlsr_lsdb.c b/nlsr_lsdb.c
index 9eb5b98..00de7b8 100644
--- a/nlsr_lsdb.c
+++ b/nlsr_lsdb.c
@@ -2489,3 +2489,90 @@
free(cor_lsa_key);
return ret;
}
+
+
+void
+destroy_name_lsdb(void)
+{
+ int i, name_lsdb_element;
+ struct nlsa *name_lsa;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->lsdb->name_lsdb, e);
+ name_lsdb_element=hashtb_n(nlsr->lsdb->name_lsdb);
+
+ for(i=0;i<name_lsdb_element;i++)
+ {
+ name_lsa=e->data;
+ destroy_name_lsa_component(name_lsa);
+ hashtb_next(e);
+ }
+
+ hashtb_end(e);
+
+ if ( nlsr->lsdb->name_lsdb )
+ hashtb_destroy(&nlsr->lsdb->name_lsdb);
+}
+
+void
+destroy_adj_lsdb(void)
+{
+ int i, adj_lsdb_element;
+ struct alsa *adj_lsa;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->lsdb->adj_lsdb, e);
+ adj_lsdb_element=hashtb_n(nlsr->lsdb->adj_lsdb);
+
+ for(i=0;i<adj_lsdb_element;i++)
+ {
+ adj_lsa=e->data;
+ destroy_adj_lsa_component(adj_lsa);
+ hashtb_next(e);
+ }
+
+ hashtb_end(e);
+ if(nlsr->lsdb->adj_lsdb )
+ hashtb_destroy(&nlsr->lsdb->adj_lsdb);
+}
+
+void
+destroy_cor_lsdb(void)
+{
+ int i, cor_lsdb_element;
+ struct clsa *cor_lsa;
+
+ struct hashtb_enumerator ee;
+ struct hashtb_enumerator *e = ⅇ
+
+ hashtb_start(nlsr->lsdb->cor_lsdb, e);
+ cor_lsdb_element=hashtb_n(nlsr->lsdb->cor_lsdb);
+
+ for(i=0;i<cor_lsdb_element;i++)
+ {
+ cor_lsa=e->data;
+ destroy_cor_lsa_component(cor_lsa);
+ hashtb_next(e);
+ }
+
+ hashtb_end(e);
+ if(nlsr->lsdb->cor_lsdb )
+ hashtb_destroy(&nlsr->lsdb->cor_lsdb);
+}
+
+void
+destroy_lsdb(void)
+{
+ destroy_name_lsdb();
+ destroy_adj_lsdb();
+ destroy_cor_lsdb();
+
+ if ( nlsr->lsdb->lsdb_version )
+ free(nlsr->lsdb->lsdb_version);
+ if ( nlsr->lsdb )
+ free(nlsr->lsdb);
+}
diff --git a/nlsr_lsdb.h b/nlsr_lsdb.h
index c67348e..db7b831 100644
--- a/nlsr_lsdb.h
+++ b/nlsr_lsdb.h
@@ -102,4 +102,6 @@
double get_hyperbolic_r(char *router);
double get_hyperbolic_theta(char *router);
+void destroy_lsdb(void);
+
#endif