From fb3f4f606659af9cbf10b0b6710fb80fcaec5627 Mon Sep 17 00:00:00 2001
From: wangzhengquan <wangzhengquan85@126.com>
Date: 星期一, 18 一月 2021 10:46:44 +0800
Subject: [PATCH] Merge branch 'master' into dev
---
src/queue/shm_queue.h | 7 ++-
src/queue/lock_free_queue.h | 3 +
src/bus_error.h | 3 +
src/socket/net_mod_server_socket.cpp | 2
src/bus_error.cpp | 7 ++-
src/socket/shm_socket.cpp | 31 ++++++++-------
src/socket/net_mod_socket.cpp | 18 ++++-----
7 files changed, 40 insertions(+), 31 deletions(-)
diff --git a/src/bus_error.cpp b/src/bus_error.cpp
index 6cee508..cf16cf2 100644
--- a/src/bus_error.cpp
+++ b/src/bus_error.cpp
@@ -13,9 +13,10 @@
static char *_bus_errlist[_bus_nerr] = {
"\0",
- "timeout",
+ "Timeout",
"The other end is not inline",
- "Key already in use"
+ "Key already in use",
+ "Network fault"
};
@@ -43,7 +44,7 @@
{
int s, eindex;
char *buf;
- eindex = err - 10000;
+ eindex = err - EBUS_BASE;
/* Make first caller allocate key for thread-specific data */
s = pthread_once(&once, createKey);
diff --git a/src/bus_error.h b/src/bus_error.h
index a951e89..709f973 100644
--- a/src/bus_error.h
+++ b/src/bus_error.h
@@ -7,7 +7,8 @@
#define EBUS_BASE 10000
#define EBUS_TIMEOUT 10001
#define EBUS_CLOSED 10002
-#define ESHM_BUS_KEY_INUSED 10003
+#define EBUS_KEY_INUSED 10003
+#define EBUS_NET 10004
extern int bus_errno;
diff --git a/src/queue/lock_free_queue.h b/src/queue/lock_free_queue.h
index bb0bfb5..924537f 100644
--- a/src/queue/lock_free_queue.h
+++ b/src/queue/lock_free_queue.h
@@ -1,3 +1,6 @@
+/**
+ * encapsulate array_lock_free_queue, add semphore. populate in kernal space.
+ */
#ifndef __LOCK_FREE_QUEUE_H__
#define __LOCK_FREE_QUEUE_H__
diff --git a/src/queue/shm_queue.h b/src/queue/shm_queue.h
index 64d4600..7d98eaa 100644
--- a/src/queue/shm_queue.h
+++ b/src/queue/shm_queue.h
@@ -1,3 +1,7 @@
+/**
+ * encapsulate lock_free_queue, populate in userspace
+ */
+
#ifndef __SHM_QUEUE_H__
#define __SHM_QUEUE_H__
@@ -7,8 +11,7 @@
#include "sem_util.h"
#include "shm_allocator.h"
#include "usg_common.h"
-// default Queue size
-// #define LOCK_FREE_Q_DEFAULT_SIZE 16
+
template <typename ELEM_T> class SHMQueue {
diff --git a/src/socket/net_mod_server_socket.cpp b/src/socket/net_mod_server_socket.cpp
index cccbe9e..8324d6f 100644
--- a/src/socket/net_mod_server_socket.cpp
+++ b/src/socket/net_mod_server_socket.cpp
@@ -181,7 +181,7 @@
}
if( ret != 0) {
- // 娌℃湁瀵瑰簲鐨刱ey
+ // 杞彂澶辫触
response_head.code = ret;
response_head.content_length = 0;
if( rio_writen(connfd, NetModSocket::encode_response_head(response_head), NET_MODE_RESPONSE_HEAD_LENGTH) != NET_MODE_RESPONSE_HEAD_LENGTH )
diff --git a/src/socket/net_mod_socket.cpp b/src/socket/net_mod_socket.cpp
index 455c0a5..73be131 100644
--- a/src/socket/net_mod_socket.cpp
+++ b/src/socket/net_mod_socket.cpp
@@ -240,12 +240,12 @@
mpool->conns[i].fd = -1;
}
- else if(n == -1) {
+ else if(n == EBUS_NET) {
// 缃戠粶閿欒
mpool->closeConn( connfd);
// mpool->conns[i].fd = -1;
} else {
- // 瀵规柟key鏄叧闂殑
+ // 浠g悊鏈嶅姟娌℃湁杞彂鎴愬姛
mpool->conns[i].fd = -1;
}
@@ -263,7 +263,6 @@
// printf("poll POLLERR %d\n", connfd);
mpool->nready--;
mpool->closeConn( connfd);
- // mpool->conns[i].fd = -1;
}
}
}
@@ -274,7 +273,6 @@
if ( (connfd = mpool->conns[i].fd) > 0 ) {
// 鍏抽棴骞舵竻闄ゅ啓鍏ユ垨璇诲彇澶辫触鐨勮繛鎺�
mpool->closeConn( connfd);
- // mpool->conns[i].fd = -1;
}
}
@@ -411,11 +409,11 @@
mpool->conns[i].fd = -1;
n_pub_suc++;
}
- else if(ret == -1) {
+ else if(ret == EBUS_NET) {
// 缃戠粶杩炴帴閿欒
mpool->closeConn( connfd);
} else {
- // 瀵规柟鐨刱ey鏄叧闂殑
+ // 浠g悊鏈嶅姟娌℃湁杞彂鎴愬姛
mpool->conns[i].fd = -1;
}
n_resp++;
@@ -693,7 +691,7 @@
}
/**
- * @return 0 鎴愬姛, 1 瀵规柟娌℃湁瀵瑰簲鐨刱ey, -1 缃戠粶閿欒
+ * @return 0 鎴愬姛, EBUS_NET 缃戠粶閿欒锛� 鍏朵粬鍊� 浠g悊鏈嶅姟娌℃湁杞彂鎴愬姛銆�
*
*/
int NetModSocket::read_response(int connfd, net_mod_recv_msg_t *recv_msg) {
@@ -712,7 +710,7 @@
// printf(">>>> read_response %s\n", response_head.host);
if(response_head.code != 0) {
// 浠g悊鏈嶅姟娌¤兘鎴愬姛鍙戦�佺粰瀵瑰簲鐨刱ey
- return 1;
+ return response_head.code;
}
recv_buf = malloc(response_head.content_length);
@@ -722,8 +720,8 @@
}
if ( (recv_size = rio_readn(connfd, recv_buf, response_head.content_length) ) != response_head.content_length) {
LoggerFactory::getLogger()->error(errno, "NetModSocket::read_response rio_readnb recv_buf");
-
- return -1;
+ //缃戠粶閿欒
+ return EBUS_NET;
}
strcpy( recv_msg->host, response_head.host);
diff --git a/src/socket/shm_socket.cpp b/src/socket/shm_socket.cpp
index 1b7721d..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(ESHM_BUS_KEY_INUSED), 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;
}
}
@@ -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;
}
}
@@ -350,10 +350,13 @@
if ((s = pthread_mutex_unlock(&(socket->mutex))) != 0)
err_exit(s, "shm_sendto : pthread_mutex_unlock");
- if (key == socket->key) {
- logger->error( "can not send to your self!");
- return -1;
- }
+ // 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!");
+ // return -1;
+ // }
SHMQueue<shm_msg_t> *remoteQueue;
if ((remoteQueue = _attach_remote_queue(key)) == NULL) {
@@ -419,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;
}
}
--
Gitblit v1.8.0