From 546bdaa58724ec6a19b56e800ad60963bd3bd1bc Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 04 二月 2021 11:42:24 +0800
Subject: [PATCH] modify callback function

---
 src/socket/shm_socket.cpp |   30 ++++++++++--------------------
 1 files changed, 10 insertions(+), 20 deletions(-)

diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index fbb849d..9ce94da 100644
--- a/src/socket/shm_socket.cpp
+++ b/src/socket/shm_socket.cpp
@@ -242,11 +242,11 @@
 }
 
 /**
- * @callback  void (*recv_callback_fn)(void **sendbuf, int *sendsize) 
+ * @callback  void (*recvandsend_callback_fn)(void *recvbuf, int recvsize, int key, void **sendbuf, int *sendsize) 
  *            sendbuf 鍜� sendsize鏄痗allbak_fn鍥炶皟鍑芥暟鐨勮繑鍥炲��, 鍒嗗埆琛ㄧず鍙戦�佹暟鎹紝鍜屽彂閫佹暟鎹殑澶у皬銆�
  * 
  */
-int shm_recvandsend(shm_socket_t *sockt, void **recvbuf, int *recvsize, int *key, recv_callback_fn callback, 
+int shm_recvandsend(shm_socket_t *sockt,  recvandsend_callback_fn callback, 
   const struct timespec *timeout, int flag, void *user_data) {
   
   int rv;
@@ -257,31 +257,21 @@
 
   rv = shm_recvpakfrom(sockt , &recvpak, timeout, flag);
 
- 
-
   if (rv != 0) {
-    if(rv == ETIMEDOUT)
+    if(rv == ETIMEDOUT){
+      logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(EBUS_TIMEOUT));
       return EBUS_TIMEOUT;
+    }
     
-    logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv));
+    logger->error("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv));
     return rv;
   }
    
-  if(recvbuf != NULL) {
-    void *_buf = malloc(recvpak.size);
-    memcpy(_buf, recvpak.buf, recvpak.size);
-    *recvbuf = _buf; 
-  }
- 
-  if(recvsize != NULL)
-    *recvsize = recvpak.size;
-
-  if(key != NULL)
-    *key = recvpak.key;
-
+  
+  void *recvbuf = malloc(recvpak.size);
+  memcpy(recvbuf, recvpak.buf, recvpak.size);
   mm_free(recvpak.buf);
-
-  callback(&sendbuf, &sendsize, user_data);
+  callback(recvbuf, recvpak.size, recvpak.key, &sendbuf, &sendsize, user_data);
 
   shm_packet_t sendpak;
   sendpak.key = sockt->key;

--
Gitblit v1.8.0