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 = &ee;
+    	
+    	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 = &ee;
+    	
+    	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