From a4d18d6ab3216ce1bf8052f0fdc4ea34bc6385e8 Mon Sep 17 00:00:00 2001 From: wangzhengquan <wangzhengquan85@126.com> Date: 星期三, 20 一月 2021 19:39:17 +0800 Subject: [PATCH] update --- lib/libusgcommon.a | 0 src/CMakeLists.txt | 3 + test/futex_test.cpp | 11 ++++- build.sh | 20 ++++++++-- CMakeLists.txt | 12 +++-- include/usgcommon/logger.h | 2 test_net_socket/heart_beat.sh | 17 ++++++-- lib/libusgcommon.so | 0 src/shm/hashtable.cpp | 16 ++++---- test/CMakeLists.txt | 19 ++++++++- test_net_socket/heart_beat.cpp | 8 ++-- 11 files changed, 76 insertions(+), 32 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a295a37..ef9b64a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,16 +14,18 @@ # set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}") option(BUILD_SHARED_LIBS "Build using shared libraries" ON) - +option(BUILD_DOC "Build doc" OFF) list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/include/usgcommon") list(APPEND EXTRA_LIBS ${PROJECT_SOURCE_DIR}/lib/libusgcommon.a pthread rt) -add_subdirectory(${PROJECT_SOURCE_DIR}/src) -add_subdirectory(${PROJECT_SOURCE_DIR}/test) -add_subdirectory(${PROJECT_SOURCE_DIR}/test_net_socket) + # build api doc -if (CMAKE_BUILD_TYPE MATCHES "^[Rr]elease") +if (BUILD_DOC) # build the docs add_subdirectory(${PROJECT_SOURCE_DIR}/doc) +else() + add_subdirectory(${PROJECT_SOURCE_DIR}/src) + add_subdirectory(${PROJECT_SOURCE_DIR}/test) + add_subdirectory(${PROJECT_SOURCE_DIR}/test_net_socket) endif() diff --git a/build.sh b/build.sh index df18217..eab77c7 100755 --- a/build.sh +++ b/build.sh @@ -1,9 +1,10 @@ #! /bin/bash BUILD_TYPE="Debug" +BUILD_DOC="OFF" function usage() { - echo "build.sh [release | debug]" + echo "build.sh [release | debug | doc]" } case ${1} in @@ -15,6 +16,15 @@ BUILD_TYPE="Debug" ;; + "doc") + BUILD_TYPE="Release" + BUILD_DOC="ON" + ;; + + "help") + usage + ;; + "") BUILD_TYPE="Debug" ;; @@ -23,6 +33,7 @@ echo "Invalid Argument." usage ;; + esac @@ -33,13 +44,14 @@ -# -DCMAKE_BUILD_TYPE=Debug | Release +# -DCMAKE_BUILD_TYPE=Debug | Release # -DBUILD_SHARED_LIBS=ON # -DCMAKE_INSTALL_PREFIX=$(pwd/../dest) # -DQCA_MAN_INSTALL_DIR:PATH=/usr/share/man -cmake -DCMAKE_INSTALL_PREFIX="$(pwd)/../dest" -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DBUILD_SHARED_LIBS=ON -DSUPPORT_RDMA=OFF .. +cmake -DCMAKE_INSTALL_PREFIX="$(pwd)/../dest" -DCMAKE_BUILD_TYPE=${BUILD_TYPE} -DBUILD_SHARED_LIBS=ON \ + -DBUILD_DOC=${BUILD_DOC} -DSUPPORT_RDMA=OFF .. cmake --build . -cmake --build . --target install +# cmake --build . --target install diff --git a/include/usgcommon/logger.h b/include/usgcommon/logger.h index cf0d2ba..61d6e02 100644 --- a/include/usgcommon/logger.h +++ b/include/usgcommon/logger.h @@ -66,7 +66,7 @@ void error(const char *fmt, ...); void error(int err, const char *fmt, ...); void fatal(const char *fmt, ...); - + void fatal(int err, const char *fmt, ...) ; static const char * strlevel(int level); }; diff --git a/lib/libusgcommon.a b/lib/libusgcommon.a index cb0b026..67ec843 100644 --- a/lib/libusgcommon.a +++ b/lib/libusgcommon.a Binary files differ diff --git a/lib/libusgcommon.so b/lib/libusgcommon.so index 3df57e3..99bdece 100644 --- a/lib/libusgcommon.so +++ b/lib/libusgcommon.so Binary files differ diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index d659558..85de799 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,7 +1,7 @@ # should we use our own math functions -option(SUPPORT_RDMA "If support rdma" ON) +option(SUPPORT_RDMA "If support rdma" OFF) # configure a header file to pass some of the CMake settings # to the source code @@ -25,6 +25,7 @@ shm/mm.cpp shm/hashtable.cpp px_sem_util.cpp + svsem_util.cpp ) diff --git a/src/shm/hashtable.cpp b/src/shm/hashtable.cpp index 5ee06ba..e421630 100755 --- a/src/shm/hashtable.cpp +++ b/src/shm/hashtable.cpp @@ -34,7 +34,7 @@ hashtable->wlock = SemUtil::get(IPC_PRIVATE, 1); hashtable->cond = SemUtil::get(IPC_PRIVATE, 1); hashtable->readcnt = 0; - +printf("hashtable->mutex=%d\n", hashtable->mutex); } void hashtable_destroy(hashtable_t *hashtable) { @@ -206,19 +206,19 @@ int rv; rv = SemUtil::dec(hashtable->mutex); if(rv != 0) { - LoggerFactory::getLogger()->error(rv, "hashtable_get\n"); + LoggerFactory::getLogger()->error(rv, "hashtable_get 1"); } hashtable->readcnt++; if (hashtable->readcnt == 1) { //鑾峰彇璇诲啓閿� rv = SemUtil::dec(hashtable->wlock); if(rv != 0) { - LoggerFactory::getLogger()->error(rv, "hashtable_get\n"); + LoggerFactory::getLogger()->error(rv, "hashtable_get 2"); } } rv = SemUtil::inc(hashtable->mutex); if(rv != 0) { - LoggerFactory::getLogger()->error(rv, "hashtable_get\n"); + LoggerFactory::getLogger()->error(rv, "hashtable_get 3"); } // ================ @@ -228,25 +228,25 @@ rv = SemUtil::dec(hashtable->mutex); if(rv != 0) { - LoggerFactory::getLogger()->error(rv, "hashtable_get\n"); + LoggerFactory::getLogger()->error(rv, "hashtable_get 4"); } hashtable->readcnt--; if(hashtable->readcnt == 0) { //閲婃斁璇诲啓閿� rv = SemUtil::inc(hashtable->wlock); if(rv != 0) { - LoggerFactory::getLogger()->error(rv, "hashtable_get\n"); + LoggerFactory::getLogger()->error(rv, "hashtable_get 5"); } //閫氱煡鍐� rv = SemUtil::set(hashtable->cond, 1); if(rv != 0) { - LoggerFactory::getLogger()->error(rv, "hashtable_get\n"); + LoggerFactory::getLogger()->error(rv, "hashtable_get 6"); } } rv = SemUtil::inc(hashtable->mutex); if(rv != 0) { - LoggerFactory::getLogger()->error(rv, "hashtable_get\n"); + LoggerFactory::getLogger()->error(rv, "hashtable_get 7"); } return res; } diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index a853353..a9fc516 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -23,5 +23,20 @@ ) -# add the install targets -install(TARGETS test1 DESTINATION bin) +add_executable(svsem_test svsem_test.cpp ) +target_link_libraries(svsem_test PRIVATE ${EXTRA_LIBS} ) +target_include_directories(svsem_test PRIVATE + "${PROJECT_BINARY_DIR}" + ${EXTRA_INCLUDES} + ) + + + +add_executable(svsem_mon svsem_mon.cpp ) +target_link_libraries(svsem_mon PRIVATE ${EXTRA_LIBS} ) +target_include_directories(svsem_mon PRIVATE + "${PROJECT_BINARY_DIR}" + ${EXTRA_INCLUDES} + ) + + diff --git a/test/futex_test.cpp b/test/futex_test.cpp index 3b31ba4..2e90999 100644 --- a/test/futex_test.cpp +++ b/test/futex_test.cpp @@ -46,6 +46,8 @@ { int s; + sigset_t mask_all, pre; + sigfillset(&mask_all); /* __sync_bool_compare_and_swap(ptr, oldval, newval) is a gcc built-in function. It atomically performs the equivalent of: @@ -60,11 +62,12 @@ /* Is the futex available? */ - if (__sync_bool_compare_and_swap(futexp, 1, 0)) + if (__sync_bool_compare_and_swap(futexp, 1, 0)) { + sigprocmask(SIG_BLOCK, &mask_all, &pre); break; /* Yes */ + } /* Futex is not available; wait */ - s = futex(futexp, FUTEX_WAIT, 0, NULL, NULL, 0); if (s == -1 && errno != EAGAIN) errExit("futex-FUTEX_WAIT"); @@ -79,12 +82,14 @@ fpost(int *futexp) { int s; - + sigset_t mask; + sigemptyset(&mask); /* __sync_bool_compare_and_swap() was described in comments above */ if (__sync_bool_compare_and_swap(futexp, 0, 1)) { s = futex(futexp, FUTEX_WAKE, 1, NULL, NULL, 0); + sigprocmask(SIG_SETMASK, &mask, NULL); if (s == -1) errExit("futex-FUTEX_WAKE"); } diff --git a/test_net_socket/heart_beat.cpp b/test_net_socket/heart_beat.cpp index 40ea621..cd21a84 100644 --- a/test_net_socket/heart_beat.cpp +++ b/test_net_socket/heart_beat.cpp @@ -15,9 +15,9 @@ void sigint_handler(int sig) { // net_mod_socket_close(server_socket); - printf("===Catch sigint======================\n"); - shm_mm_wrapper_destroy(); - exit(0); + // printf("===Catch sigint======================\n"); + // shm_mm_wrapper_destroy(); + // exit(0); } void server(int port) { @@ -65,7 +65,7 @@ void *runclient(void *arg) { - signal(SIGINT, sigint_handler); + // signal(SIGINT, sigint_handler); Targ *targ = (Targ *)arg; int port = targ->port; void *client = net_mod_socket_open(); diff --git a/test_net_socket/heart_beat.sh b/test_net_socket/heart_beat.sh index 10cecc3..893a5d3 100755 --- a/test_net_socket/heart_beat.sh +++ b/test_net_socket/heart_beat.sh @@ -1,9 +1,10 @@ #! /bin/bash -PROCESSES=100 +PROCESSES=10 function clean() { - ps -ef | grep "heart_beat" | awk '{print $2}' | xargs -i kill -9 {} - ipcrm -a + ipcrm -a + ps -ef | grep "heart_beat" | awk '{print $2}' | xargs -i kill -9 {} + } function start_server() { @@ -28,7 +29,6 @@ kill -9 ${pid_arr[$i]} #./heart_beat client 101 & ${pid_arr[$i]}=$! done - ipcrm -a } @@ -36,11 +36,18 @@ "server") start_server ;; + "clients") start_clients sleep 5 close_clients ;; + + + "clean") + clean + ;; + "") start_server sleep 1 @@ -48,6 +55,8 @@ sleep 5 close_clients ;; + + *) echo "error input" exit 1 -- Gitblit v1.8.0