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