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/util/sem_util.c | 3 -
test_socket/dgram_mod_survey.c | 4 +-
src/queue/include/lock_free_queue.h | 4 +-
src/socket/dmod_socket.c | 37 ++++++++++--------
test_socket/test_open_close.c | 11 +++++
test_socket/Makefile | 2
src/Makefile | 2
7 files changed, 38 insertions(+), 25 deletions(-)
diff --git a/src/Makefile b/src/Makefile
index 9f399e1..df65135 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -26,7 +26,7 @@
PREFIX = $(ROOT)/build
ifeq ($(DEBUG),y)
- MYLIBS = $(LIBSQUEUE)
+ MYLIBS = $(LIBSQUEUE) $(DLIBSQUEUE)
else
MYLIBS = $(LIBSQUEUE) $(DLIBSQUEUE)
endif
diff --git a/src/queue/include/lock_free_queue.h b/src/queue/include/lock_free_queue.h
index 8a65e81..17e8c56 100644
--- a/src/queue/include/lock_free_queue.h
+++ b/src/queue/include/lock_free_queue.h
@@ -252,7 +252,7 @@
if (errno == EAGAIN)
return false;
else {
- err_msg(errno, "LockFreeQueue push_timeout");
+ // err_msg(errno, "LockFreeQueue push_timeout");
return false;
}
}
@@ -324,7 +324,7 @@
if (errno == EAGAIN)
return false;
else {
- err_msg(errno, "LockFreeQueue pop_timeout");
+ // err_msg(errno, "LockFreeQueue pop_timeout");
return false;
}
}
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) {
diff --git a/src/util/sem_util.c b/src/util/sem_util.c
index e7c98b9..bc8c4f4 100644
--- a/src/util/sem_util.c
+++ b/src/util/sem_util.c
@@ -114,7 +114,7 @@
while (semtimedop(semId, &sops, 1, timeout) == -1)
if (errno != EINTR) {
- err_msg(errno, "SemUtil::dec_timeout");
+ // err_msg(errno, "SemUtil::dec_timeout");
return -1;
}
@@ -123,7 +123,6 @@
/* Release semaphore - increment it by 1 */
int SemUtil::inc(int semId) {
-logger.debug("%d: SemUtil::inc\n", semId);
struct sembuf sops;
sops.sem_num = 0;
diff --git a/test_socket/Makefile b/test_socket/Makefile
index a63b4f7..f4b24ef 100644
--- a/test_socket/Makefile
+++ b/test_socket/Makefile
@@ -14,7 +14,7 @@
include $(ROOT)/Make.defines.$(PLATFORM)
-PROGS = dgram_mod_bus dgram_mod_survey dgram_mod_req_rep test_timeout
+PROGS = dgram_mod_bus dgram_mod_survey dgram_mod_req_rep test_timeout test_open_close
build: $(PROGS)
diff --git a/test_socket/dgram_mod_survey.c b/test_socket/dgram_mod_survey.c
index a492637..bab06c3 100644
--- a/test_socket/dgram_mod_survey.c
+++ b/test_socket/dgram_mod_survey.c
@@ -43,7 +43,7 @@
sprintf(sendbuf, "%d", i);
printf("SEND HEART:%s\n", sendbuf);
dgram_mod_sendto(socket, sendbuf, strlen(sendbuf) + 1, port);
- // sleep(1);
+ sleep(1);
i++;
}
dgram_mod_close_socket(socket);
@@ -63,7 +63,7 @@
sprintf(sendbuf, "%d", i);
printf("%d SEND HEART:%s\n", targ->id, sendbuf);
dgram_mod_sendto(socket, sendbuf, strlen(sendbuf) + 1, port);
- // sleep(1);
+ sleep(1);
i++;
}
diff --git a/test_socket/test_open_close.c b/test_socket/test_open_close.c
new file mode 100644
index 0000000..4baae1d
--- /dev/null
+++ b/test_socket/test_open_close.c
@@ -0,0 +1,11 @@
+#include "dgram_mod_socket.h"
+#include "shm_mm.h"
+#include "usg_common.h"
+#include "lock_free_queue.h"
+
+int main() {
+ shm_init(512);
+ void *socket = dgram_mod_open_socket();
+ dgram_mod_close_socket(socket);
+ // dgram_mod_close_socket(socket);
+}
\ No newline at end of file
--
Gitblit v1.8.0