From 00dba6082e245d917cb7d6eed3c627211ff41cd7 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期五, 25 九月 2020 15:53:21 +0800
Subject: [PATCH] update

---
 src/socket/dmod_socket.c |   39 +++++++++++++++++++++------------------
 1 files changed, 21 insertions(+), 18 deletions(-)

diff --git a/src/socket/dmod_socket.c b/src/socket/dmod_socket.c
index df57a9f..a0aa96b 100644
--- a/src/socket/dmod_socket.c
+++ b/src/socket/dmod_socket.c
@@ -52,16 +52,6 @@
 		}
 	}
 	return count;
-// 	foreach_subscripters([keys, length, &count](SHMKeySet *subscripter_set, int key){
-// printf("foreach===========\n");
-// 		if (include_in_keys(key, keys, length)) {
-
-// 			//subscripter_set->erase(key);
-// printf("remove_subscripter %d\n", key);
-// 			count++;
-// 		}
-// 	});
-// printf("remove_subscripters count = %d\n", count);
 	
 }
 
@@ -72,34 +62,47 @@
 }
 
 DModSocket::DModSocket() {
-		shm_socket = shm_open_socket(SHM_SOCKET_DGRAM);
-		bus_set = new std::set<int>;
+	mod = (socket_mod_t)0;
+	shm_socket = shm_open_socket(SHM_SOCKET_DGRAM);
+	bus_set = new std::set<int>;
+	topic_sub_map = NULL;
 }
 
 DModSocket::~DModSocket() {
+// printf("DModSocket  destory 1\n");
 	SHMKeySet *subscripter_set;
 	SHMTopicSubMap::iterator map_iter;
 	struct timespec timeout = {1, 0};
 	if(bus_set != NULL) {
 		for(auto bus_iter = bus_set->begin(); bus_iter != bus_set->end(); bus_iter++) {
+// printf("DModSocket  desub_timeout before");
 			desub_timeout(NULL, 0, *bus_iter, &timeout);
+// printf("DModSocket  desub_timeout after %d\n", *bus_iter);
 		}
 		delete bus_set;
 	}
-	
+
+// printf("DModSocket  destory 2\n");	
 	if(topic_sub_map != NULL) {
 		for (map_iter = topic_sub_map->begin(); map_iter != topic_sub_map->end(); map_iter++) {
 			subscripter_set = map_iter->second;
-			subscripter_set->clear();
-			mm_free((void *)subscripter_set);
-			//delete subscripter_set;
-			// printf("=============delete subscripter_set\n");
+// printf("DModSocket  destory 2-1\n");	
+			if(subscripter_set != NULL) {
+// printf("DModSocket  destory 2-2\n");	
+				subscripter_set->clear();
+// printf("DModSocket  destory 2-3\n");	
+				mm_free((void *)subscripter_set);
+// printf("DModSocket  destory 2-4\n");	
+			}
+
 		}
 		topic_sub_map->clear();
 		mem_pool_free_by_key(BUS_MAP_KEY);
 	}
+// printf("DModSocket  destory 3\n");	
 	// printf("=============close socket\n");
 	shm_close_socket(shm_socket);
+// printf("DModSocket  destory 4\n");	
 }
 
 int DModSocket::bind(int port) {
@@ -419,7 +422,7 @@
 			  }
 
 			} else if(strcmp(action, "desub") == 0) {
-printf("desub topic=%s,%s,%d\n", topics, trim(topics, 0), strcmp(trim(topics, 0), ""));
+// printf("desub topic=%s,%s,%d\n", topics, trim(topics, 0), strcmp(trim(topics, 0), ""));
 				if(strcmp(trim(topics, 0), "") == 0) {
 					// 鍙栨秷鎵�鏈夎闃�
 		printf("====鍙栨秷鎵�鏈夎闃匼n");

--
Gitblit v1.8.0