wangzhengquan
2021-01-18 00afff988a8d000c8c660e98db90288cfc2920aa
update
5个文件已修改
45 ■■■■■ 已修改文件
src/bus_error.h 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/queue/lock_free_queue.h 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/queue/shm_queue.h 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/net_mod_server_socket.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/shm_socket.cpp 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/bus_error.h
@@ -7,7 +7,7 @@
#define EBUS_BASE 10000
#define EBUS_TIMEOUT 10001
#define EBUS_CLOSED 10002
#define ESHM_BUS_KEY_INUSED 10003
#define EBUS_KEY_INUSED 10003
extern int bus_errno;
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__
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 {
src/socket/net_mod_server_socket.cpp
@@ -181,7 +181,7 @@
    }
    if( ret != 0) {
      // 没有对应的key
      // 转发失败
      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 )
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;
      }
    }