From 4fd62552d8277f3d0ed20e66663cd219c36796df Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期四, 21 一月 2021 11:20:22 +0800
Subject: [PATCH] update
---
src/socket/shm_socket.cpp | 52 +++++++++++++++++++++++++---------------------------
1 files changed, 25 insertions(+), 27 deletions(-)
diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index 672a9a7..534202d 100644
--- a/src/socket/shm_socket.cpp
+++ b/src/socket/shm_socket.cpp
@@ -30,8 +30,8 @@
static inline int _shm_socket_check_key(shm_socket_t *socket) {
void *tmp_ptr = mm_get_by_key(socket->key);
if (tmp_ptr!= NULL && tmp_ptr != (void *)1 && !socket->force_bind ) {
- bus_errno = ESHM_BUS_KEY_INUSED;
- logger->error("%s. key = %d ", bus_strerror(bus_errno), socket->key);
+ bus_errno = EBUS_KEY_INUSED;
+ logger->error("%s. key = %d ", bus_strerror(EBUS_KEY_INUSED), socket->key);
return 0;
}
return 1;
@@ -133,8 +133,8 @@
} else {
if(!_shm_socket_check_key(socket)) {
- bus_errno = ESHM_BUS_KEY_INUSED;
- return ESHM_BUS_KEY_INUSED;
+ bus_errno = EBUS_KEY_INUSED;
+ return EBUS_KEY_INUSED;
}
}
@@ -224,8 +224,8 @@
socket->key = hashtable_alloc_key(hashtable);
} else {
if(!_shm_socket_check_key(socket)) {
- bus_errno = ESHM_BUS_KEY_INUSED;
- return ESHM_BUS_KEY_INUSED;
+ bus_errno = EBUS_KEY_INUSED;
+ return EBUS_KEY_INUSED;
}
}
@@ -318,7 +318,7 @@
const int key, const struct timespec *timeout, const int flags) {
int s;
- bool rv;
+ int rv;
if (socket->socket_type != SHM_SOCKET_DGRAM) {
logger->error( "shm_socket.shm_sendto: Can't invoke shm_sendto method in a %d type socket which is "
@@ -338,8 +338,8 @@
} else {
if(!_shm_socket_check_key(socket)) {
- bus_errno = ESHM_BUS_KEY_INUSED;
- return ESHM_BUS_KEY_INUSED;
+ bus_errno = EBUS_KEY_INUSED;
+ return EBUS_KEY_INUSED;
}
}
@@ -349,6 +349,9 @@
if ((s = pthread_mutex_unlock(&(socket->mutex))) != 0)
err_exit(s, "shm_sendto : pthread_mutex_unlock");
+
+ // There is some case where a socket need to send to himeself, for example when bus server need to stop, he need to send himself
+ // a top message.
// if (key == socket->key) {
// logger->error( "can not send to your self!");
@@ -385,14 +388,13 @@
} else {
delete remoteQueue;
mm_free(dest.buf);
- if(rv == EBUS_TIMEOUT) {
+ if(rv > EBUS_BASE) {
// bus_errno = EBUS_TIMEOUT;
- // logger->error("sendto key %d failed, %s", key, bus_strerror(EBUS_TIMEOUT));
- return EBUS_TIMEOUT;
+ logger->debug("sendto key %d failed %s", key, bus_strerror(rv));
} else {
- //logger->error(errno, "sendto key %d failed!", key);
- return rv;
+ logger->error(rv, "sendto key %d failed", key);
}
+ return rv;
}
@@ -401,7 +403,7 @@
// 鐭繛鎺ユ柟寮忔帴鍙�
int shm_recvfrom(shm_socket_t *socket, void **buf, int *size, int *key, struct timespec *timeout, int flags) {
int s;
- bool rv;
+ int rv;
if (socket->socket_type != SHM_SOCKET_DGRAM) {
logger->error("shm_socket.shm_recvfrom: Can't invoke shm_recvfrom method in a %d type socket which "
@@ -420,8 +422,8 @@
} else {
if(!_shm_socket_check_key(socket)) {
- bus_errno = ESHM_BUS_KEY_INUSED;
- return ESHM_BUS_KEY_INUSED;
+ bus_errno = EBUS_KEY_INUSED;
+ return EBUS_KEY_INUSED;
}
}
@@ -437,6 +439,7 @@
rv = socket->queue->pop_nowait(src);
} else if(timeout != NULL) {
rv = socket->queue->pop_timeout(src, timeout);
+// printf("0 shm_recvfrom====%d\n", rv);
} else {
rv = socket->queue->pop(src);
}
@@ -457,14 +460,12 @@
mm_free(src.buf);
return 0;
} else {
-
- if(rv == EBUS_TIMEOUT) {
- // logger->error("shm_recvfrom failed, %s", bus_strerror(EBUS_TIMEOUT));
- return EBUS_TIMEOUT;
+ if(rv > EBUS_BASE) {
+ logger->debug("shm_recvfrom failed %s", bus_strerror(rv));
} else {
- // logger->error(rv, "shm_recvfrom failed!");
- return rv;
+ logger->error(rv, "shm_recvfrom failed");
}
+ return rv;
}
}
@@ -531,7 +532,7 @@
if (tmp_socket == NULL)
{
/* If first call from this thread, allocate buffer for thread, and save its location */
- logger->debug("%d create tmp socket\n", pthread_self() );
+ logger->debug("%ld create tmp socket\n", (long)pthread_self() );
tmp_socket = shm_open_socket(SHM_SOCKET_DGRAM);
rv = pthread_setspecific(_tmp_recv_socket_key_, tmp_socket);
@@ -543,13 +544,10 @@
if ((rv = shm_sendto(tmp_socket, send_buf, send_size, send_key, timeout, flags)) == 0) {
rv = shm_recvfrom(tmp_socket, recv_buf, recv_size, &recv_key, timeout, flags);
-
return rv;
} else {
-
return rv;
}
- return -1;
}
int _shm_sendandrecv_alloc_new(shm_socket_t *socket, const void *send_buf,
--
Gitblit v1.8.0