From dc5557c7bb411037002e706cb20df0f71d12e5ee Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期一, 10 八月 2020 15:20:54 +0800
Subject: [PATCH] fix topic_sub_map

---
 src/socket/dmod_socket.c |   37 ++++++++++++++++++++-----------------
 1 files changed, 20 insertions(+), 17 deletions(-)

diff --git a/src/socket/dmod_socket.c b/src/socket/dmod_socket.c
index df57a9f..ad7b504 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++) {
-			desub_timeout(NULL, 0, *bus_iter, &timeout);
+// 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) {

--
Gitblit v1.8.0