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