From 8b4ddf10e71e1c8fabd33c72b282f7da65ff682f Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期二, 14 七月 2020 15:59:44 +0800
Subject: [PATCH] commit

---
 queue/libshm_queue.a              |    0 
 queue/include/shm_queue.h         |   29 ++++
 test2/test_queue_wrapper          |    0 
 test2/client.c                    |    8 
 test2/server                      |    0 
 include/usgcommon/usg_common.h    |    3 
 test/test_timeout                 |    0 
 test2/test_queue_wrapper.c        |   40 +++--
 queue/include/shm_queue_wrapper.h |   48 +++++-
 test/multiple_queue_consumer      |    0 
 test2/Makefile                    |    2 
 test/multiple_queue_productor     |    0 
 README.md                         |  119 ----------------
 queue/hashtable.c                 |   39 +++++
 queue/sem_util.c                  |    4 
 test/test_queue                   |    0 
 test2/client                      |    0 
 test/test_lostdata                |    0 
 test/single_consumer              |    0 
 test/single_productor             |    0 
 queue/hashtable.h                 |    7 
 queue/shm_queue_wrapper.c         |   47 +++++-
 test2/server.c                    |   11 
 queue/include/lock_free_queue.h   |   21 +-
 24 files changed, 199 insertions(+), 179 deletions(-)

diff --git a/README.md b/README.md
index 4193faf..a611ce8 100644
--- a/README.md
+++ b/README.md
@@ -1,121 +1,8 @@
-<<<<<<< HEAD
-## 瀹炰緥
-
-```
-#include "shm_queue_wrapper.h"
-#include "mm.h"
-
-typedef struct message_t
-{
-	char method[20];
-	int code;
-	
-} message_t;
-
-void test1() {
-	unsigned int i = 0;
-	int key = 2;
- 	// 
-	size_t qsize = 16;
-	void * queue = shmqueue_init( key, qsize, sizeof(message_t));
-	message_t item;
-	// LockFreeQueue<struct Item> queue(16);
-	for(i = 0; i < qsize; i++) {
-		sprintf(item.method, "hello"); 
-		item.code = i ; 
-		if(shmqueue_push(queue, (void *)&item)) {
-			  printf("push:%d %s\n", item.code, item.method );
-		}
-	}
-	 
-	struct timespec timeout = {1, 0};
-
-	i = 0;
-	while((shmqueue_pop_timeout(queue, (void *)&item, &timeout)) ) {
-	    printf("pop:%d %s\n", item.code, item.method );
-	   // cout <<  item.pic << endl;
-	    i++;
-	}
-
-	//閿�姣侀槦鍒�
-	shmqueue_destroy(queue);
-}
-
  
-int main () {
-	test1();
-
-	//鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ垯閿�姣佹暣鍧楀唴瀛樸��
-	mm_destroy();
-	return 0;
-}
-```
+## 瀹炰緥
+ 璇锋眰搴旂瓟 `./test2/server.c ./test2/client.c`
 
 ## 鎺ュ彛璇存槑
 
-```
 
-
-/**
- * 鍒濆鍖�
- * @ shmqueue 
- * @ key 鏍囪瘑鍏变韩闃熷垪鐨勫敮涓�key
- * @ queue_size 闃熷垪澶у皬 , 杩欎釜鍊煎繀椤绘槸2鐨勬寚鏁板嵆 1, 2, 4, 8, 16 绛�
- * @ ele_size 闃熷垪涓厓绱犲ぇ灏�, 杩欎釜鍊间笉鑳借秴杩�512锛屽綋鐒跺鏋滈渶瑕佸彲浠ヨ皟鏁磋繖涓渶澶ч檺鍒�
- */
-void* shmqueue_init(int key, int queue_size, int ele_size);
-/**
- * 閿�姣�
-*/
-void shmqueue_destroy(void *shmqueue);
-/**
- * 闃熷垪鍏冪礌鐨勪釜鏁�
- */
-uint32_t shmqueue_size(void *shmqueue);
-/**
- * 鏄惁宸叉弧
- */
-int shmqueue_full(void *shmqueue);
-
-/**
- * 鏄惁涓虹┖
- */
-int shmqueue_empty(void *shmqueue);
-
-/**
- * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟
- */
-int shmqueue_push(void *shmqueue, void *src_ele);
-
-/**
- * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖
- */
-int shmqueue_push_nowait(void *shmqueue, void *src_ele);
-
-/**
- * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥�
- */
-int shmqueue_push_timeout(void *shmqueue, void *src_ele, struct timespec * timeout);
-
-/**
- * 鍑洪槦, 闃熷垪绌烘椂绛夊緟
- */
-int shmqueue_pop(void *shmqueue, void *dest_ele);
-
-/**
- * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖
- */
-int shmqueue_pop_nowait(void *shmqueue, void *dest_ele);
-
-/**
- * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥�
- */
-int shmqueue_pop_timeout(void *shmqueue, void *dest_ele, struct timespec * timeout);
-
-```
-=======
-## softbus
-
-shm鐨勯�氳搴�
->>>>>>> dd08a8134dea74ac30213c1b8580bff34ee7095b
-
+ 
diff --git a/include/usgcommon/usg_common.h b/include/usgcommon/usg_common.h
index ad509ed..20fefe9 100644
--- a/include/usgcommon/usg_common.h
+++ b/include/usgcommon/usg_common.h
@@ -64,9 +64,10 @@
 #include <algorithm>
 #include <iomanip>
 #include <limits>
-#include <map>
 #include <initializer_list>
 #include <vector>
+#include <map>
+#include <set>
 #include <thread>
  
 #endif
diff --git a/queue/hashtable.c b/queue/hashtable.c
index 4662afb..629d2af 100755
--- a/queue/hashtable.c
+++ b/queue/hashtable.c
@@ -2,6 +2,7 @@
 #include "hashtable.h"
 #include "mm.h"
 #include "sem_util.h"
+#include <set>
 
 typedef struct tailq_entry_t
 {
@@ -118,6 +119,10 @@
 
 }
 
+
+
+
+
 void hashtable_removeall(hashtable_t *hashtable)
 {
   tailq_entry_t *item;
@@ -224,3 +229,37 @@
   //閲婃斁璇诲啓閿�
   SemUtil::inc(hashtable->wlock);
 }
+
+
+
+void hashtable_foreach(hashtable_t *hashtable, hashtable_foreach_cb cb) {
+  tailq_entry_t *item;
+  for (int i = 0; i < MAPSIZE; i++) {
+    tailq_header_t *my_tailq_head = hashtable->array[i] ;
+
+    if (my_tailq_head == NULL )
+      continue;
+
+    TAILQ_FOREACH(item, my_tailq_head, joint)
+    {
+      cb(item->key,  item -> value);
+    }
+  }
+}
+
+std::set<int> * hashtable_keyset(hashtable_t *hashtable) {
+  std::set<int> *keyset = new std::set<int>;
+  tailq_entry_t *item;
+  for (int i = 0; i < MAPSIZE; i++) {
+    tailq_header_t *my_tailq_head = hashtable->array[i] ;
+
+    if (my_tailq_head == NULL )
+      continue;
+
+    TAILQ_FOREACH(item, my_tailq_head, joint)
+    {
+      keyset->insert(item->key);
+    }
+  }
+  return keyset;
+}
\ No newline at end of file
diff --git a/queue/hashtable.h b/queue/hashtable.h
index bbe2aa6..2cdfb4d 100755
--- a/queue/hashtable.h
+++ b/queue/hashtable.h
@@ -2,7 +2,7 @@
 #define __HASHTABLE_H__
 
 #include <sys/queue.h>
-//#include "queue.h"
+#include <set>
 
 #define MAPSIZE 100
 
@@ -15,6 +15,7 @@
  size_t readcnt;
 
 } hashtable_t;
+typedef void (*hashtable_foreach_cb)(int key, void *value);
 
 void hashtable_init(hashtable_t *hashtable);
 void *hashtable_get(hashtable_t *hashtable, int key);
@@ -23,7 +24,11 @@
 void hashtable_removeall(hashtable_t *hashtable);
 
 
+void hashtable_foreach(hashtable_t *hashtable, hashtable_foreach_cb cb);
+
 void hashtable_printall(hashtable_t *hashtable);
 
 int hashtable_alloc_key(hashtable_t *hashtable);
+
+std::set<int> * hashtable_keyset(hashtable_t *hashtable) ;
 #endif
diff --git a/queue/include/lock_free_queue.h b/queue/include/lock_free_queue.h
index cba9f0e..d33424e 100644
--- a/queue/include/lock_free_queue.h
+++ b/queue/include/lock_free_queue.h
@@ -3,7 +3,7 @@
 
 #include <usg_common.h>
 #include <assert.h> // assert()
-#include "mm.h" 
+#include "mem_pool.h"
 #include "sem_util.h"
 #include "logger_factory.h"
 
@@ -253,7 +253,8 @@
 bool LockFreeQueue<ELEM_T, Q_TYPE>::pop(ELEM_T &a_data)
 {
     if (SemUtil::dec(items) == -1) {
-        err_exit(errno, "remove");
+        err_msg(errno, "LockFreeQueue pop");
+        return false;
     }
 
     if (m_qImpl.pop(a_data)) {
@@ -272,8 +273,10 @@
     if (SemUtil::dec_nowait(items) == -1) {
         if (errno == EAGAIN)
             return false;
-        else
-            err_exit(errno, "remove_nowait");
+        else {
+            err_msg(errno, "LockFreeQueue pop_nowait");
+            return false;
+        }
     }
 
     if (m_qImpl.pop(a_data)) {
@@ -293,8 +296,10 @@
     if (SemUtil::dec_timeout(items, timeout) == -1) {
         if (errno == EAGAIN)
             return false;
-        else 
-            err_exit(errno, "remove_timeout");
+        else {
+            err_msg(errno, "LockFreeQueue pop_timeout");
+            return false;
+        }
     }
 
     if (m_qImpl.pop(a_data)) {
@@ -316,14 +321,14 @@
     typename ELEM_T, 
     template <typename T> class Q_TYPE>
 void * LockFreeQueue<ELEM_T, Q_TYPE>::operator new(size_t size){
-        return mm_malloc(size);
+        return mem_pool_malloc(size);
 }
 
 template <
     typename ELEM_T, 
     template <typename T> class Q_TYPE>
 void LockFreeQueue<ELEM_T, Q_TYPE>::operator delete(void *p) {
-    return mm_free(p);
+    return mem_pool_free(p);
 }
 
 // include implementation files
diff --git a/queue/include/shm_queue.h b/queue/include/shm_queue.h
index 93bd7dc..3a506c9 100644
--- a/queue/include/shm_queue.h
+++ b/queue/include/shm_queue.h
@@ -39,6 +39,10 @@
 
     inline ELEM_T& operator[](unsigned i);
 
+    static void remove_queues_exclue(int *keys, size_t length);
+private:
+
+
 protected:
     /// @brief the actual queue-> methods are forwarded into the real 
     ///        implementation
@@ -51,6 +55,31 @@
 
 
 template < typename ELEM_T >
+void SHMQueue<ELEM_T>::remove_queues_exclue(int *keys, size_t length)
+{
+    hashtable_t *hashtable = mm_get_hashtable();
+    std::set<int>* keyset = hashtable_keyset(hashtable);
+    std::set<int>::iterator keyItr;
+     LockFreeQueue<ELEM_T>* mqueue;
+    bool found;
+    for (keyItr = keyset->begin(); keyItr != keyset->end(); keyItr++) {
+        found = false;
+        for(int i = 0; i < length; i++) {
+            if(*keyItr == keys[i]) {
+                found = true;
+                break;
+            }
+        }
+        if(!found) {
+           mqueue = (LockFreeQueue<ELEM_T> *)hashtable_get(hashtable, *keyItr);
+           delete mqueue;
+        }
+    }
+    delete keyset;
+    
+}  
+
+template < typename ELEM_T >
 SHMQueue<ELEM_T>::SHMQueue(int key, size_t qsize): KEY(key)
 {
 
diff --git a/queue/include/shm_queue_wrapper.h b/queue/include/shm_queue_wrapper.h
index cdfb2e2..6d9013b 100644
--- a/queue/include/shm_queue_wrapper.h
+++ b/queue/include/shm_queue_wrapper.h
@@ -22,6 +22,10 @@
  */
 void shm_destroy();
 
+ 
+
+//绉婚櫎涓嶅寘鍚湪keys涓殑闃熷垪
+void shm_remove_queues_exclue(void *keys, int length);
 /**
  * 鍒涘缓闃熷垪
  * @ shmqueue 
@@ -31,58 +35,76 @@
 void* shmqueue_create( int * key, int queue_size);
 
 /**
- * 缁戝畾key鍒伴槦鍒楋紝浣嗘槸骞朵笉浼氬垱寤洪槦鍒椼�傚鏋滄病鏈夊搴旀寚瀹歬ey鐨勯槦鍒楁彁绀洪敊璇苟杩斿洖绌哄��
+ * 缁戝畾key鍒伴槦鍒楋紝浣嗘槸骞朵笉浼氬垱寤洪槦鍒椼�傚鏋滄病鏈夊搴旀寚瀹歬ey鐨勯槦鍒楁彁绀洪敊璇苟閫�鍑�
  */
-void* shmqueue_attach(int key);
+void* shmqueue_attach(int key) ;
+
 /**
  * 閿�姣�
 */
-void shmqueue_drop(void * _shmqueue) ;
+void shmqueue_drop(void * _shmqueue);
 
 /**
  * 闃熷垪鍏冪礌鐨勪釜鏁�
  */
-int shmqueue_size(void * _shmqueue);
+int shmqueue_size(void * _shmqueue) ;
+
 /**
  * 鏄惁宸叉弧
+ * @return 1鏄紝 0鍚�
  */
 int shmqueue_full(void * _shmqueue);
 
 /**
  * 鏄惁涓虹┖
+ * @return 1鏄紝 0鍚�
  */
 int shmqueue_empty(void * _shmqueue) ;
 
 /**
- * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟
+ * 鍏ラ槦, 闃熷垪婊℃椂绛夊緟.
+ * @return 1 鍏ラ槦鎴愬姛, 0 鍏ラ槦澶辫触
  */
-int shmqueue_push(void * _shmqueue, void *src_ele, int ele_size);
+int shmqueue_push(void * _shmqueue, void *src, int size);
 
 /**
- * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖
+ * 鍏ラ槦, 闃熷垪婊℃椂绔嬪嵆杩斿洖.
+ * @return 1 鍏ラ槦鎴愬姛, 0 鍏ラ槦澶辫触
  */
-int shmqueue_push_nowait(void * _shmqueue, void *src_ele, int ele_size) ;
+int shmqueue_push_nowait(void * _shmqueue, void *src, int size) ;
 
 /**
  * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥�
- * timespec {sec绉�, nsec绾崇}
+ * @sec 绉�
+ * @nsec 绾崇
+ * @return 1 鍏ラ槦鎴愬姛, 0 鍏ラ槦澶辫触
  */
-int shmqueue_push_timeout(void * _shmqueue, void *src_ele, int ele_size, void * _timeout);
+int shmqueue_push_timeout(void * _shmqueue, void *src, int size,  int sec, int nsec) ;
 
 /**
  * 鍑洪槦, 闃熷垪绌烘椂绛夊緟
+ * @return 1 鍑洪槦鎴愬姛锛� 0鍑洪槦澶辫触
  */
-int shmqueue_pop(void * _shmqueue, void *dest_ele);
+int shmqueue_pop(void * _shmqueue, void **dest, int *size);
 
 /**
  * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖
+ * @return 1 鍑洪槦鎴愬姛锛� 0鍑洪槦澶辫触
  */
-int shmqueue_pop_nowait(void * _shmqueue, void *dest_ele) ;
+int shmqueue_pop_nowait(void * _shmqueue, void **dest, int *size) ;
 
 /**
  * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥�
+ * @sec绉�
+ * @nsec绾崇
+ * @return 1 鍑洪槦鎴愬姛锛� 0鍑洪槦澶辫触
  */
-int shmqueue_pop_timeout(void * _shmqueue, void *dest_ele, void * _timeout);
+int shmqueue_pop_timeout(void * _shmqueue, void **dest, int *size, int sec, int nsec);
+
+/**
+ * 閲婃斁鍑洪槦鍒嗛厤鐨勫唴瀛�
+ */
+void shmqueue_free(void *ptr);
 
 #ifdef __cplusplus
 }
diff --git a/queue/libshm_queue.a b/queue/libshm_queue.a
index 834164e..4676de3 100644
--- a/queue/libshm_queue.a
+++ b/queue/libshm_queue.a
Binary files differ
diff --git a/queue/sem_util.c b/queue/sem_util.c
index ea23f7c..6ed43fa 100644
--- a/queue/sem_util.c
+++ b/queue/sem_util.c
@@ -132,7 +132,7 @@
 void SemUtil::remove(int semid) {
     union semun dummy;
     if (semctl(semid, 0, IPC_RMID, dummy) == -1)
-        err_exit(errno, "semctl");
+        err_msg(errno, "SemUtil::remove");
 
 }
 
@@ -142,7 +142,7 @@
     union semun arg;
     arg.val = val;
     if (semctl(semId, 0, SETVAL, arg) == -1)
-        err_exit(errno, "SemUtil::set semctl");
+        err_msg(errno, "SemUtil::set");
 }
 
 
diff --git a/queue/shm_queue_wrapper.c b/queue/shm_queue_wrapper.c
index cb30568..a6abd17 100644
--- a/queue/shm_queue_wrapper.c
+++ b/queue/shm_queue_wrapper.c
@@ -21,6 +21,11 @@
 	mem_pool_destroy();
 }
 
+//绉婚櫎涓嶅寘鍚湪keys涓殑闃熷垪
+void shm_remove_queues_exclue(void *keys, int length) {
+	SHMQueue<ele_t>::remove_queues_exclue((int*)keys, (size_t)length);
+}
+
 /**
  * 鍒涘缓闃熷垪
  * @ shmqueue 
@@ -122,27 +127,33 @@
 
 /**
  * 鍏ラ槦, 鎸囧畾鏃堕棿鍐呭叆闃熶笉鎴愬姛灏辫繑鍥�
- * timespec {sec绉�, nsec绾崇}
+ * @sec绉�
+ * @nsec绾崇
  */
-int shmqueue_push_timeout(void * _shmqueue, void *src, int size,  void * _timeout) {
-	struct timespec *timeout = (struct timespec *)_timeout;
+int shmqueue_push_timeout(void * _shmqueue, void *src, int size,  int sec, int nsec) {
+
+	struct timespec timeout = {sec, nsec};
 	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
 	ele_t dest;
 	dest.size = size;
 	dest.buf = mm_malloc(size);
 	memcpy(dest.buf, src, size);
-	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_timeout(dest, timeout);
+	return ((SHMQueue<ele_t> *)(shmqueue->mqueue))->push_timeout(dest, &timeout);
 }
 
 /**
  * 鍑洪槦, 闃熷垪绌烘椂绛夊緟
  */
-int shmqueue_pop(void * _shmqueue, void *dest) {
+int shmqueue_pop(void * _shmqueue, void **dest, int *size) {
 	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
 	ele_t src;
+
 	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop(src);
 	if (rv) {
-		memcpy(dest, src.buf, src.size);
+		void * _dest = malloc(src.size);
+		memcpy(_dest, src.buf, src.size);
+		*dest = _dest;
+		*size = src.size;
 		mm_free(src.buf);
 		return 1;
 	} else {
@@ -154,12 +165,16 @@
 /**
  * 鍑洪槦, 闃熷垪绌烘椂绔嬪嵆杩斿洖
  */
-int shmqueue_pop_nowait(void * _shmqueue, void *dest) {
+int shmqueue_pop_nowait(void * _shmqueue, void **dest, int *size) {
 	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
 	ele_t src;
+	
 	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_nowait(src);
 	if (rv) {
+		void * _dest = malloc(src.size);
 		memcpy(dest, src.buf, src.size);
+		*dest = _dest;
+		*size = src.size;
 		mm_free(src.buf);
 		return 1;
 	} else {
@@ -169,14 +184,20 @@
 
 /**
  * 鍑洪槦, 鎸囧畾鏃堕棿鍐呭嚭闃熶笉鎴愬姛灏辫繑鍥�
+ * @sec绉�
+ * @nsec绾崇
  */
-int shmqueue_pop_timeout(void * _shmqueue, void *dest, void * _timeout) {
-	struct timespec *timeout = (struct timespec *)_timeout;
+int shmqueue_pop_timeout(void * _shmqueue, void **dest, int *size, int sec, int nsec) {
+	struct timespec timeout = {sec, nsec};
 	shmqueue_t * shmqueue = (shmqueue_t *)_shmqueue;
 	ele_t src;
-	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_timeout(src, timeout);
+	
+	bool rv = ((SHMQueue<ele_t> *)(shmqueue->mqueue))->pop_timeout(src, &timeout);
 	if (rv) {
-		memcpy(dest, src.buf, src.size);
+		void * _dest = malloc(src.size);
+		memcpy(_dest, src.buf, src.size);
+		*dest = _dest;
+		*size = src.size;
 		mm_free(src.buf);
 		return 1;
 	} else {
@@ -184,4 +205,8 @@
 	}
 }
 
+void shmqueue_free(void *ptr) {
+	free(ptr);
+}
+
 
diff --git a/test/multiple_queue_consumer b/test/multiple_queue_consumer
index f61b254..0db518d 100755
--- a/test/multiple_queue_consumer
+++ b/test/multiple_queue_consumer
Binary files differ
diff --git a/test/multiple_queue_productor b/test/multiple_queue_productor
index 7c72ebd..29046c6 100755
--- a/test/multiple_queue_productor
+++ b/test/multiple_queue_productor
Binary files differ
diff --git a/test/single_consumer b/test/single_consumer
index 2086547..f3369d1 100755
--- a/test/single_consumer
+++ b/test/single_consumer
Binary files differ
diff --git a/test/single_productor b/test/single_productor
index 214555a..f0a8b92 100755
--- a/test/single_productor
+++ b/test/single_productor
Binary files differ
diff --git a/test/test_lostdata b/test/test_lostdata
index 159b08c..7ca646d 100755
--- a/test/test_lostdata
+++ b/test/test_lostdata
Binary files differ
diff --git a/test/test_queue b/test/test_queue
index 2c19fc1..f8b2955 100755
--- a/test/test_queue
+++ b/test/test_queue
Binary files differ
diff --git a/test/test_timeout b/test/test_timeout
index c4469a4..d83e4ce 100755
--- a/test/test_timeout
+++ b/test/test_timeout
Binary files differ
diff --git a/test2/Makefile b/test2/Makefile
index be8415f..9743df5 100644
--- a/test2/Makefile
+++ b/test2/Makefile
@@ -14,7 +14,7 @@
 include $(ROOT)/Make.defines.$(PLATFORM)
 
 
-PROGS =	test_queue_wrapper server client sem_test
+PROGS =	test_queue_wrapper server client
 
 
 build: $(PROGS)
diff --git a/test2/client b/test2/client
index 4a1aa39..516aeb1 100755
--- a/test2/client
+++ b/test2/client
Binary files differ
diff --git a/test2/client.c b/test2/client.c
index fd511d5..2d4746d 100644
--- a/test2/client.c
+++ b/test2/client.c
@@ -17,15 +17,17 @@
 	msg_t msg;
 	msg.key = key;
 
-	msg_t rec_msg;
+	void * rec_msg;
+	int rec_msg_size;
 	//鍏ラ槦
 	while(true) {
 	  printf("=====>say some thing:\n");
 	  scanf("%s", msg.buf);
 	  shmqueue_push(remote_queue, (void *)&msg, sizeof(msg));
 	  //printf("send: %s\n",  msg.buf);
-	  shmqueue_pop(local_queue, (void *)&rec_msg );
-	  printf("=====>peer : %s\n",  rec_msg.buf);
+	  shmqueue_pop(local_queue, &rec_msg, &rec_msg_size);
+	  printf("=====>peer : %s\n",  ((msg_t*)rec_msg)->buf);
+	  free(rec_msg);
 
 	  
 	}
diff --git a/test2/server b/test2/server
index f48ed6c..47e62b9 100755
--- a/test2/server
+++ b/test2/server
Binary files differ
diff --git a/test2/server.c b/test2/server.c
index 2cf97a1..f3fa3b5 100644
--- a/test2/server.c
+++ b/test2/server.c
@@ -9,7 +9,8 @@
 } msg_t;
 
 void server() {
- 	msg_t msg;
+ 	void * msg;
+ 	int msg_size;
  	msg_t send_msg;
  	int key = 1;
 	size_t qsize = 16;
@@ -17,11 +18,11 @@
 
 	struct timespec timeout = {1, 0};
 	
-	while(shmqueue_pop(local_queue, (void *)&msg) ) {
-		void * remote_queue = shmqueue_attach(msg.key);
-	    printf("received: %s\n", msg.buf);
+	while(shmqueue_pop(local_queue, &msg, &msg_size) ) {
+		void * remote_queue = shmqueue_attach(((msg_t *)msg)->key);
+	    printf("received: %s\n", ((msg_t *)msg)->buf);
 	    // send_msg.key = 1;
-	    sprintf(send_msg.buf, "hello, I have received: %s!", msg.buf);
+	    sprintf(send_msg.buf, "hello, I have received: %s!", ((msg_t *)msg)->buf);
 	    shmqueue_push(remote_queue, (void *)&send_msg, sizeof(send_msg));
 	    shmqueue_drop(remote_queue);
 	   // cout <<  item.pic << endl;
diff --git a/test2/test_queue_wrapper b/test2/test_queue_wrapper
index e6d73d9..493e51d 100755
--- a/test2/test_queue_wrapper
+++ b/test2/test_queue_wrapper
Binary files differ
diff --git a/test2/test_queue_wrapper.c b/test2/test_queue_wrapper.c
index 7ae3e9c..6483fb3 100644
--- a/test2/test_queue_wrapper.c
+++ b/test2/test_queue_wrapper.c
@@ -1,36 +1,40 @@
 #include "shm_queue_wrapper.h"
 #include "mm.h"
 
-typedef struct message_t
-{
-	char method[20];
-	int code;
+// typedef struct message_t
+// {
+// 	char method[20];
+// 	int code;
 	
-} message_t;
+// } message_t;
 
 void test1() {
 	unsigned int i = 0;
-	int key = -1;
+	int key = 1;
  
 	size_t qsize = 16;
 	void * queue = shmqueue_create( &key, qsize);
-	message_t item;
+	//message_t item;
+	char msg[100];
+	void *rtmsg;
+	int size;
 	
 	for(i = 0; i < qsize; i++) {
-		sprintf(item.method, "hello"); 
-		item.code = i ; 
+		sprintf(msg, "%d hello", i); 
 		//鍏ラ槦
-		if(shmqueue_push(queue, (void *)&item, sizeof(message_t))) {
-			  printf("push:%d %s\n", item.code, item.method );
+		if(shmqueue_push(queue, (void *)msg, sizeof(msg))) {
+			  printf("push: %s\n", msg );
 		}
 	}
-	printf("%d\n", key);
-	struct timespec timeout = {1, 0};
-
+	printf("key == %d\n", key);
+	// struct timespec timeout = {1, 0};
+	// int keys[] = {1,2};
+	// shm_remove_queues_exclue((void *)keys, 1);
 	i = 0;
 	// 鍑洪槦
-	while((shmqueue_pop_timeout(queue, (void *)&item, &timeout)) ) {
-	    printf("pop:%d %s\n", item.code, item.method );
+	while((shmqueue_pop_timeout(queue, &rtmsg, &size, 1, 0)) ) {
+	    printf("pop: %s\n", (char *)rtmsg );
+	    free(rtmsg);
 	   // cout <<  item.pic << endl;
 	    i++;
 	}
@@ -41,10 +45,10 @@
 
  
 int main () {
-	mm_init(512);
+	shm_init(512);
 	test1();
 
 	//鏁翠釜杩涚▼閫�鍑烘椂闇�瑕佹墽琛岃繖涓柟娉曪紝璇ユ柟娉曢鍏堜細妫�鏌ユ槸鍚﹁繕鏈夊叾浠栬繘绋嬪湪浣跨敤璇ュ叡浜唴瀛橈紝濡傛灉杩樻湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ氨鍙槸detach,濡傛灉娌℃湁鍏朵粬杩涚▼鍦ㄤ娇鐢ㄥ垯閿�姣佹暣鍧楀唴瀛樸��
-	mm_destroy();
+	shm_destroy();
 	return 0;
 }
\ No newline at end of file

--
Gitblit v1.8.0