7943aecc21c74de25175e3c6621ae2f8ea927673..3414a407f12677845087571c59713182a9b21d05
2021-02-26 wangzhengquan
update
3414a4 对比 | 目录
2021-02-26 wangzhengquan
update
5f246a 对比 | 目录
1个文件已添加
1 文件已重命名
4个文件已修改
120 ■■■■ 已修改文件
src/psem.h 42 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/socket/shm_socket.cpp 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/CMakeLists.txt 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test/test_sem.cpp 补丁 | 查看 | 原始文档 | blame | 历史
test/test_sem2.cpp 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
test_net_socket/shm_util.cpp 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/psem.h
@@ -7,31 +7,31 @@
inline int psem_timedwait(sem_t *sem, const struct timespec *ts) {
    struct timespec abs_timeout = TimeUtil::calc_abs_time(ts);
  return sem_timedwait(sem, &abs_timeout);
  // int rv ;
  // while ( (rv = sem_timedwait(sem, &abs_timeout)) == -1) {
  //     if(errno == EINTR)
  //         continue;
  //     else {
  //        // LoggerFactory::getLogger()->error(errno, "LockFreeQueue push_timeout");
  //        return -1;
  //     }
  // }
  // return 0;
  // return sem_timedwait(sem, &abs_timeout);
  int rv ;
  while ( (rv = sem_timedwait(sem, &abs_timeout)) == -1) {
      if(errno == EINTR)
          continue;
      else {
         // LoggerFactory::getLogger()->error(errno, "LockFreeQueue push_timeout");
         return -1;
      }
  }
  return 0;
}
inline int psem_wait(sem_t *sem) {
  return sem_wait(sem);
  // int rv;
  // while ( (rv = sem_wait(sem)) == -1) {
  //     if(errno == EINTR)
  //         continue;
  //     else {
  //        return -1;
  //     }
  // }
  // return 0;
  // return sem_wait(sem);
  int rv;
  while ( (rv = sem_wait(sem)) == -1) {
      if(errno == EINTR)
          continue;
      else {
         return -1;
      }
  }
  return 0;
}
inline int psem_trywait(sem_t *sem) {
src/socket/shm_socket.cpp
@@ -292,7 +292,7 @@
{
  int rv;
  logger->debug("%d destroy threadlocal socket\n", pthread_self());
  logger->debug("%lu destroy threadlocal socket\n", pthread_self());
  if(tmp_socket == NULL)
    return;
test/CMakeLists.txt
@@ -70,3 +70,12 @@
                            "${PROJECT_BINARY_DIR}"
                             ${EXTRA_INCLUDES}
                            )
add_executable(test_sem2 test_sem2.cpp )
target_link_libraries(test_sem2 PRIVATE  ${EXTRA_LIBS} )
target_include_directories(test_sem2 PRIVATE
                            "${PROJECT_BINARY_DIR}"
                             ${EXTRA_INCLUDES}
                            )
test/test_sem.cpp
test/test_sem2.cpp
New file
@@ -0,0 +1,64 @@
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
#include <time.h>
#include <assert.h>
#include <errno.h>
#include <signal.h>
sem_t sem;
#define handle_error(msg) \
           do { perror(msg); exit(EXIT_FAILURE); } while (0)
static void
handler(int sig)
{
  puts("sig handler\n");
  // write(STDOUT_FILENO, "sem_post() from handler\n", 24);
  // if (sem_post(&sem) == -1)
  // {
  //   write(STDERR_FILENO, "sem_post() failed\n", 18);
  //   _exit(EXIT_FAILURE);
  // }
}
int
main(int argc, char *argv[])
{
  struct sigaction sa;
  struct timespec ts;
  int s;
  if (sem_init(&sem, 0, 0) == -1)
    handle_error("sem_init");
  /* Establish SIGALRM handler; set alarm timer using argv[1] */
  sa.sa_handler = handler;
  sigemptyset(&sa.sa_mask);
  sa.sa_flags = 0;
  if (sigaction(SIGINT, &sa, NULL) == -1)
    handle_error("sigaction");
  /* Calculate relative interval as current time plus
     number of seconds given argv[2] */
  if (clock_gettime(CLOCK_REALTIME, &ts) == -1)
    handle_error("clock_gettime");
  ts.tv_sec += atoi(argv[2]);
  printf("main() about to call sem_wait()\n");
  while ((s = sem_wait(&sem)) == -1 )
    printf("%d , %d\n", errno, errno == EINTR);
}
test_net_socket/shm_util.cpp
@@ -44,7 +44,7 @@
  pthread_detach(pthread_self());
  
  char action[512];
  while ( true) {
  while ( true ) {
    printf("Input action: Close?\n");
    if(scanf("%s",action) < 1) {
      printf("Invalide action\n");
@@ -881,7 +881,6 @@
    opt =  parse_args(argc, argv);
    if(opt.bind == 0) {
      usage(argv[0]);
      exit(1);
    } else {
      start_recvfrom(opt.bind, opt.force);
    }