wangzhengquan
2021-02-03 f1ae0552e2d50ce6f87a0bad2f31b8e2ec617bb7
update
2个文件已修改
54 ■■■■■ 已修改文件
src/socket/shm_socket.cpp 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test_net_socket/test_net_mod_socket.cpp 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/shm_socket.cpp
@@ -148,27 +148,31 @@
  hashtable_t *hashtable = mm_get_hashtable();
  if( sockt->queue != NULL)
    goto LABEL_PUSH;
 
  if ((rv = pthread_mutex_lock(&(sockt->mutex))) != 0)
  {
    if ((rv = pthread_mutex_lock(&(sockt->mutex))) != 0)
    err_exit(rv, "shm_sendto : pthread_mutex_lock");
  if (sockt->queue == NULL) {
    if (sockt->key == 0) {
      sockt->key = hashtable_alloc_key(hashtable);
    if (sockt->queue == NULL) {
      if (sockt->key == 0) {
        sockt->key = hashtable_alloc_key(hashtable);
      }
      sockt->queue = shm_socket_bind_queue( sockt->key, sockt->force_bind);
      if(sockt->queue  == NULL ) {
        logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key);
        return EBUS_KEY_INUSED;
      }
    }
    sockt->queue = shm_socket_bind_queue( sockt->key, sockt->force_bind);
    if(sockt->queue  == NULL ) {
      logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key);
      return EBUS_KEY_INUSED;
    }
  }
  if ((rv = pthread_mutex_unlock(&(sockt->mutex))) != 0)
    err_exit(rv, "shm_sendto : pthread_mutex_unlock");
    if ((rv = pthread_mutex_unlock(&(sockt->mutex))) != 0)
      err_exit(rv, "shm_sendto : pthread_mutex_unlock");
  
  // There is some case where a sockt need to send to himeself, for example when bus server need to stop, he need to send himself
  // a top message.
  }
  
 LABEL_PUSH:
  if (key == sockt->key) {
    logger->error( "can not send to your self!");
    return EBUS_SENDTO_SELF;
@@ -210,10 +214,14 @@
  
  hashtable_t *hashtable = mm_get_hashtable();
  if ((rv = pthread_mutex_lock(&(sockt->mutex))) != 0)
    err_exit(rv, "shm_recvfrom : pthread_mutex_lock");
  if( sockt->queue != NULL)
    goto LABEL_POP;
  {
    if ((rv = pthread_mutex_lock(&(sockt->mutex))) != 0)
      err_exit(rv, "shm_recvfrom : pthread_mutex_lock");
 
  if (sockt->queue == NULL) {
    if (sockt->key == 0) {
      sockt->key = hashtable_alloc_key(hashtable);
    }  
@@ -222,10 +230,14 @@
      logger->error("%s. key = %d", bus_strerror(EBUS_KEY_INUSED), sockt->key);
      return EBUS_KEY_INUSED;
    }
    if ((rv = pthread_mutex_unlock(&(sockt->mutex))) != 0)
      err_exit(rv, "shm_recvfrom : pthread_mutex_unlock");
  }
  
  if ((rv = pthread_mutex_unlock(&(sockt->mutex))) != 0)
    err_exit(rv, "shm_recvfrom : pthread_mutex_unlock");
LABEL_POP:
  shm_packet_t src;
 
test_net_socket/test_net_mod_socket.cpp
@@ -272,7 +272,7 @@
    sprintf(sendbuf, hello_format, net_mod_socket_get_key(client), l);
    // fprintf(fp, "requst:%s\n", sendbuf);
    // n = net_mod_socket_sendandrecv(client, node_arr, node_arr_size, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size);
    n = net_mod_socket_sendandrecv_timeout(client, targ->node, 1, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size, 1);
    n = net_mod_socket_sendandrecv_timeout(client, targ->node, 1, sendbuf, strlen(sendbuf) + 1, &recv_arr, &recv_arr_size, 1000);
    printf("%d: send %d nodes\n", l, n);
    for(j=0; j < recv_arr_size; j++) {
@@ -372,7 +372,7 @@
  while(true) {
    sprintf(buf, hello_format, pid, l);
    n = net_mod_socket_sendandrecv_timeout(client, node_arr, node_arr_size, buf, strlen(buf)+1,
      &recv_arr, &recv_arr_size, 1);
      &recv_arr, &recv_arr_size, 1000);
    printf(" %d nodes reply\n", n);
    for(j = 0; j < recv_arr_size; j++) {