From 83956b12d863924936a98c9dfbece37feb0cce9c Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 04 二月 2021 14:48:04 +0800
Subject: [PATCH] update

---
 src/socket/shm_socket.cpp |   36 ++++++++++++++++++++++++------------
 1 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index 9e3f583..39c79b5 100644
--- a/src/socket/shm_socket.cpp
+++ b/src/socket/shm_socket.cpp
@@ -156,8 +156,11 @@
   shm_packet_t sendpak = {0};
   sendpak.key = sockt->key;
   sendpak.size = size;
-  sendpak.buf = mm_malloc(size);
-  memcpy(sendpak.buf, buf, size);
+  if(buf != NULL) {
+    sendpak.buf = mm_malloc(size);
+    memcpy(sendpak.buf, buf, size);
+  }
+ 
   rv = shm_sendpakto(sockt, &sendpak, key, timeout, flag);
   return rv;
 }
@@ -176,8 +179,10 @@
   
   sendpak.key = sockt->key;
   sendpak.size = send_size;
-  sendpak.buf = mm_malloc(send_size);
-  memcpy(sendpak.buf, send_buf, send_size);
+  if(send_buf != NULL) {
+    sendpak.buf = mm_malloc(send_size);
+    memcpy(sendpak.buf, send_buf, send_size);
+  }
   memcpy(sendpak.uuid, uuid.c_str(), uuid.length() + 1);
   // uuid.copy(sendpak.uuid, sizeof sendpak.uuid);
   rv = shm_sendpakto(sockt, &sendpak, key, timeout, flags);
@@ -251,7 +256,7 @@
   
   int rv;
  
-  void *sendbuf = NULL;
+  void *sendbuf, *recvbuf = NULL;
   int sendsize = 0;
   shm_packet_t recvpak = {0};
 
@@ -259,18 +264,20 @@
 
   if (rv != 0) {
     if(rv == ETIMEDOUT){
-      logger->debug("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(EBUS_TIMEOUT));
+      logger->debug("%d shm_recvandsend failed %s", shm_socket_get_key(sockt), bus_strerror(EBUS_TIMEOUT));
       return EBUS_TIMEOUT;
     }
     
-    logger->error("%d shm_recvfrom failed %s", shm_socket_get_key(sockt), bus_strerror(rv));
+    logger->error("%d shm_recvandsend failed %s", shm_socket_get_key(sockt), bus_strerror(rv));
     return rv;
   }
    
-  
-  void *recvbuf = malloc(recvpak.size);
-  memcpy(recvbuf, recvpak.buf, recvpak.size);
-  mm_free(recvpak.buf);
+  if(recvpak.buf != NULL) {
+    recvbuf = malloc(recvpak.size);
+    memcpy(recvbuf, recvpak.buf, recvpak.size);
+    mm_free(recvpak.buf);
+  }
+ 
   callback(recvbuf, recvpak.size, recvpak.key, &sendbuf, &sendsize, user_data);
 
   shm_packet_t sendpak = {0};
@@ -280,6 +287,10 @@
   if(sendbuf !=NULL && sendsize > 0) {
     sendpak.buf = mm_malloc(sendsize);
     memcpy(sendpak.buf, sendbuf, sendsize);
+  } else {
+
+    logger->warn("%d shm_recvandsend : sendbuf is null", shm_socket_get_key(sockt));
+    // return -1;
   }
  
   rv = shm_sendpakto(sockt, &sendpak, recvpak.key, timeout, flag);
@@ -307,7 +318,7 @@
   } 
 
 
- if(buf != NULL) {
+ if(buf != NULL && recvpak.buf != NULL) {
     void *_buf = malloc(recvpak.size);
     memcpy(_buf, recvpak.buf, recvpak.size);
     *buf = _buf; 
@@ -544,6 +555,7 @@
 LABEL_POP:
 
  
+  printf("%p start recv.....\n", sockt);
  
   rv = sockt->queue->pop(*recvpak, timeout, flag);
 

--
Gitblit v1.8.0