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