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/shm_queue_wrapper.c |   47 ++++++++++++++++++++++++++++++++++++-----------
 1 files changed, 36 insertions(+), 11 deletions(-)

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);
+}
+
 

--
Gitblit v1.8.0