From bc2afe32e8db4318f2a2adea49d85b10d0d4cc97 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期一, 08 二月 2021 16:51:24 +0800
Subject: [PATCH] update

---
 test_net_socket/CMakeLists.txt     |    9 +-
 shm_util/CMakeLists.txt            |    6 +
 src/net/net_mod_socket_wrapper.cpp |    4 
 src/logger_factory.cpp             |    2 
 src/socket/shm_socket.h            |    4 
 shm_util/shm_util.cpp              |   63 +++++++++++++++
 CMakeLists.txt                     |    1 
 src/socket/shm_socket.cpp          |   75 ++----------------
 test/CMakeLists.txt                |    7 +
 test/thread_set.cpp                |   53 +++++++++++++
 10 files changed, 147 insertions(+), 77 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8cbc168..5d9be24 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -30,4 +30,5 @@
 	add_subdirectory(${PROJECT_SOURCE_DIR}/test)
 	add_subdirectory(${PROJECT_SOURCE_DIR}/test_net_socket)
 	add_subdirectory(${PROJECT_SOURCE_DIR}/test_socket)
+	add_subdirectory(${PROJECT_SOURCE_DIR}/shm_util)
 endif()
diff --git a/shm_util/CMakeLists.txt b/shm_util/CMakeLists.txt
new file mode 100644
index 0000000..c604f55
--- /dev/null
+++ b/shm_util/CMakeLists.txt
@@ -0,0 +1,6 @@
+add_executable(shm_util shm_util.cpp )
+target_link_libraries(shm_util PRIVATE shm_queue ${EXTRA_LIBS} )
+target_include_directories(shm_util PRIVATE
+                            "${PROJECT_BINARY_DIR}"
+                             ${EXTRA_INCLUDES}
+                            )
\ No newline at end of file
diff --git a/shm_util/shm_util.cpp b/shm_util/shm_util.cpp
new file mode 100644
index 0000000..2f49fa8
--- /dev/null
+++ b/shm_util/shm_util.cpp
@@ -0,0 +1,63 @@
+#include <assert.h>
+#include "net_mod_server_socket_wrapper.h"
+#include "net_mod_socket_wrapper.h"
+#include "bus_server_socket_wrapper.h"
+
+#include "shm_mm_wrapper.h"
+#include "usg_common.h"
+#include <getopt.h>
+#include "logger_factory.h"
+
+
+static void usage(const char *name) {
+	printf("Usage: %s {list}\n", name);
+
+}
+
+
+void list () {
+	hashtable_t *hashtable = mm_get_hashtable();
+	hashtable_foreach(hashtable, [&](int key, void * value){
+ 		printf("%d\n", key);
+  });
+}
+
+
+void remove(int key) {
+	hashtable_t *hashtable = mm_get_hashtable();
+	
+	LockFreeQueue<shm_packet_t> * mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, key);
+	if(mqueue != NULL) {
+		delete mqueue;
+		hashtable_remove(hashtable, key);
+	}
+}
+
+int main(int argc, char *argv[]) {
+	shm_mm_wrapper_init(512);
+	int key;
+	int i;
+	if(argc < 2) {
+		usage(argv[0]);
+		return 1;
+	}
+
+	if(strcmp(argv[1], "list") == 0) {
+		list();
+	}
+	else if(strcmp(argv[1], "rm") == 0) {
+		if(argc < 3) {
+			usage(argv[0]);
+			return 1;
+		}
+		for(i = 2; i < argc; i++) {
+			key = atoi(argv[i]);
+			remove(key);
+		}
+		
+	}
+
+	shm_mm_wrapper_destroy();
+
+
+}
\ No newline at end of file
diff --git a/src/logger_factory.cpp b/src/logger_factory.cpp
index 79383d7..2301a27 100644
--- a/src/logger_factory.cpp
+++ b/src/logger_factory.cpp
@@ -18,7 +18,7 @@
 	config.logFile = logFile;
 
 #ifdef BUILD_Debug
-	config.level = Logger::DEBUG;
+	config.level = Logger::INFO;
 	config.console = 1;
 #else
 	config.level = Logger::ERROR;
diff --git a/src/net/net_mod_socket_wrapper.cpp b/src/net/net_mod_socket_wrapper.cpp
index 6f9a66e..d22a99a 100644
--- a/src/net/net_mod_socket_wrapper.cpp
+++ b/src/net/net_mod_socket_wrapper.cpp
@@ -16,8 +16,8 @@
  * 鍏抽棴
  */
 void net_mod_socket_close(void *_socket) {
-	NetModSocket *sockt = (NetModSocket *)_socket;
-	delete sockt;
+	// NetModSocket *sockt = (NetModSocket *)_socket;
+	// delete sockt;
 }
  
 int net_mod_socket_stop(void *_socket) {
diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index 82eaa1f..0d82be0 100644
--- a/src/socket/shm_socket.cpp
+++ b/src/socket/shm_socket.cpp
@@ -27,7 +27,7 @@
                const int key, const struct timespec *timeout, const int flag);
 
 
-static int _shm_sendandrecv_use_uuid(shm_socket_t *sockt, const void *send_buf,
+static int _shm_sendandrecv_uuid(shm_socket_t *sockt, const void *send_buf,
                     const int send_size, const int key, void **recv_buf,
                     int *recv_size,  const struct timespec *timeout,  int flags);
 
@@ -74,53 +74,6 @@
   return queue;
 }
 
-//鍒犻櫎鍖呭惈鍦╧eys鍐呯殑queue
-// size_t shm_socket_remove_keys(int keys[], size_t length) {
-//   hashtable_t *hashtable = mm_get_hashtable();
-//   LockFreeQueue<shm_packet_t> *mqueue;
-//   size_t count = 0;
-//   for(int i = 0; i< length; i++) {
-//     // 閿�姣佸叡浜唴瀛樼殑queue
-//     mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, keys[i]);
-//     delete mqueue;
-//     hashtable_remove(hashtable, keys[i]);
-//     count++;
-//   }
-//   return count;
-// }
-
- 
-// // 鍒犻櫎涓嶅湪keys鍐呯殑queue 
-// size_t shm_socket_remove_keys_exclude(int keys[], size_t length) {
-//   hashtable_t *hashtable = mm_get_hashtable();
-//   std::set<int> *keyset = hashtable_keyset(hashtable);
-//   std::set<int>::iterator keyItr;
-//   LockFreeQueue<shm_packet_t> *mqueue;
-//   bool found;
-//   size_t count = 0;
-//   for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) {
-//     found = false;
-//     for (size_t i = 0; i < length; i++) {
-//       if (*keyItr == keys[i]) {
-//         found = true;
-//         break;
-//       }
-//     }
-//     // 100鍐呯殑鏄痓us鍐呴儴鑷繁鐢ㄧ殑
-//     if (!found && *keyItr > 100) {
-//       // 閿�姣佸叡浜唴瀛樼殑queue
-//       mqueue = (LockFreeQueue<shm_packet_t> *)hashtable_get(hashtable, *keyItr);
-//       delete mqueue;
-//       hashtable_remove(hashtable, *keyItr);
-//       count++;
-//     }
-//   }
-//   delete keyset;
-//   return count;
-// }
-
-
-
 shm_socket_t *shm_socket_open(shm_socket_type_t socket_type) {
   int s, type;
   pthread_mutexattr_t mtxAttr;
@@ -151,11 +104,8 @@
   return sockt;
 }
 
+
 int shm_socket_close(shm_socket_t *sockt) {
-
-}
-
-int _shm_socket_close_(shm_socket_t *sockt) {
   
   int rv;
   logger->debug("shm_socket_close\n");
@@ -221,6 +171,7 @@
 int shm_sendandrecv(shm_socket_t *sockt, const void *send_buf,
                     const int send_size, const int key, void **recv_buf,
                     int *recv_size,  const struct timespec *timeout,  int flags) {
+  // return _shm_sendandrecv_uuid(sockt, send_buf, send_size, key, recv_buf, recv_size, timeout, flags);
   return _shm_sendandrecv_thread_local(sockt, send_buf, send_size, key, recv_buf, recv_size, timeout, flags);
 } 
 
@@ -348,7 +299,7 @@
 }
 
 
-static int _shm_sendandrecv_use_uuid(shm_socket_t *sockt, const void *send_buf,
+static int _shm_sendandrecv_uuid(shm_socket_t *sockt, const void *send_buf,
                     const int send_size, const int key, void **recv_buf,
                     int *recv_size,  const struct timespec *timeout,  int flags) {
 
@@ -411,7 +362,6 @@
 
 LABLE_FAIL:
   return EBUS_RECVFROM_WRONG_END;
-  // return rv;
  
 LABLE_SUC:
  if(recv_buf != NULL) {
@@ -424,12 +374,7 @@
   if(recv_size != NULL)
     *recv_size = recvpak.size;
 
- 
-
   return 0;
-
-
-
 }
 
 // use thread local
@@ -438,7 +383,7 @@
                     int *recv_size,  const struct timespec *timeout,  int flags) {
   
  
-  int rv, tryn = 3;
+  int rv, tryn = 6;
   shm_packet_t sendpak;
   shm_packet_t recvpak;
   std::map<int, shm_packet_t>::iterator recvbufIter;
@@ -480,18 +425,14 @@
     return rv;
   }
 
-  if(rv != 0) {
-    return rv;
-  }
-
   while(tryn > 0) {
     tryn--;
     recvbufIter = tmp_socket->recvbuf2.find(key);
     if(recvbufIter != tmp_socket->recvbuf2.end()) {
-      // 鍦ㄧ紦瀛橀噷鏌ュ埌浜哢UID鍖归厤鎴愬姛鐨�
-// logger->debug("get from recvbuf: %s", uuid.c_str());
+      // 鍦ㄧ紦瀛橀噷鏌ュ埌浜唊ey鍖归厤鎴愬姛鐨�
+ // logger->info("get from recvbuf: %d", key);
       recvpak = recvbufIter->second;
-      sockt->recvbuf2.erase(recvbufIter);
+      tmp_socket->recvbuf2.erase(recvbufIter);
       goto LABLE_SUC;
     }
 
diff --git a/src/socket/shm_socket.h b/src/socket/shm_socket.h
index 4407237..97d9f2c 100644
--- a/src/socket/shm_socket.h
+++ b/src/socket/shm_socket.h
@@ -51,9 +51,9 @@
 shm_socket_t *shm_socket_open(shm_socket_type_t socket_type);
 
 
-int shm_socket_close(shm_socket_t * socket) ;
+int shm_socket_close(shm_socket_t * sockt) ;
 
-int shm_socket_stop(shm_socket_t *sockt);
+int shm_socket_stop(shm_socket_t * sockt);
 
 
 int shm_socket_bind(shm_socket_t * socket, int key) ;
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 31bfd83..cba8712 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -64,4 +64,9 @@
                              ${EXTRA_INCLUDES}
                             )
 
-
+add_executable(thread_set thread_set.cpp )
+target_link_libraries(thread_set PRIVATE  ${EXTRA_LIBS} )
+target_include_directories(thread_set PRIVATE
+                            "${PROJECT_BINARY_DIR}"
+                             ${EXTRA_INCLUDES}
+                            )
diff --git a/test/thread_set.cpp b/test/thread_set.cpp
new file mode 100644
index 0000000..c17b0f3
--- /dev/null
+++ b/test/thread_set.cpp
@@ -0,0 +1,53 @@
+
+#include "usg_common.h"
+
+#define THREADS 4
+
+typedef struct shm_packet_t {
+	int key;
+	size_t size;
+	void * buf;
+	char uuid[64];
+	int action;
+
+} shm_packet_t;
+
+
+void *_run_(void *arg) {
+	std::map<int, shm_packet_t> * amap = (std::map<int, shm_packet_t> *)arg;
+	std::map<int, shm_packet_t>::iterator iter;
+	iter = amap->find(2);
+	while(  iter  != amap->end() ) {
+		amap->erase(iter);
+		iter = amap->find(2);
+		sleep(1);
+	}
+
+}
+
+int main() {
+	int i;
+	pthread_t tids[THREADS];
+	std::map<int, shm_packet_t> * amap = new std::map<int, shm_packet_t>;
+
+	for (i = 0; i < THREADS; i++) {
+    
+    pthread_create(&tids[i], NULL, _run_, (void *)&amap);
+  }
+
+  shm_packet_t pack;
+  pack.key = 2;
+	
+	while(true) {
+		sleep(1);
+		amap->insert({2, pack});
+	}
+
+
+  for (i = 0; i < THREADS; i++) {
+    if (pthread_join(tids[i], NULL) != 0) {
+      perror(" pthread_join");
+    }
+  }
+
+}
\ No newline at end of file
diff --git a/test_net_socket/CMakeLists.txt b/test_net_socket/CMakeLists.txt
index 0b85d7d..81cf641 100644
--- a/test_net_socket/CMakeLists.txt
+++ b/test_net_socket/CMakeLists.txt
@@ -9,6 +9,11 @@
 # add the executable
 add_executable(test_net_mod_socket test_net_mod_socket.cpp  ${PROJECT_BINARY_DIR}/bin/net_mod_socket.sh)
 target_link_libraries(test_net_mod_socket PRIVATE shm_queue  ${EXTRA_LIBS} )
+target_include_directories(test_net_mod_socket PRIVATE
+                            "${PROJECT_BINARY_DIR}"
+                             ${EXTRA_INCLUDES}
+                            )
+
 
 
 add_executable(test_bus_stop test_bus_stop.cpp)
@@ -24,10 +29,6 @@
                             )
 
 
-target_include_directories(test_net_mod_socket PRIVATE
-                            "${PROJECT_BINARY_DIR}"
-                             ${EXTRA_INCLUDES}
-                            )
 
 # add the install targets
 install(TARGETS test_net_mod_socket DESTINATION bin)

--
Gitblit v1.8.0