From fac2eeeb9d718bdb892eef9adf333ea61ba8f3d0 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 30 May 2020 07:54:09 -0400 Subject: [PATCH 1/9] cirrus: Remove no longer needed install step --- .cirrus.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.cirrus.yml b/.cirrus.yml index fde5551531..44b49bb397 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -30,9 +30,5 @@ task: folder: "/tmp/ccache_dir" depends_built_cache: folder: "/tmp/cirrus-ci-build/depends/built" - install_script: - - apt-get update - - apt-get -y install git bash ccache - - ccache --max-size=${CCACHE_SIZE} ci_script: - ./ci/test_run_all.sh From fa2ffe87f794caa74f80c1c2d6e6067ee4849632 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 30 May 2020 07:56:56 -0400 Subject: [PATCH 2/9] ci: Deduplicate DOCKER_EXEC --- ci/test/04_install.sh | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh index 14ab943d68..8be0d5646d 100755 --- a/ci/test/04_install.sh +++ b/ci/test/04_install.sh @@ -48,16 +48,14 @@ if [ -z "$DANGER_RUN_CI_ON_HOST" ]; then --env-file /tmp/env \ --name $CONTAINER_NAME \ $DOCKER_NAME_TAG) - - DOCKER_EXEC () { - docker exec $DOCKER_ID bash -c "export PATH=$BASE_SCRATCH_DIR/bins/:\$PATH && cd $P_CI_DIR && $*" - } + export DOCKER_CI_CMD_PREFIX="docker exec $DOCKER_ID" else echo "Running on host system without docker wrapper" - DOCKER_EXEC () { - bash -c "export PATH=$BASE_SCRATCH_DIR/bins/:\$PATH && cd $P_CI_DIR && $*" - } fi + +DOCKER_EXEC () { + $DOCKER_CI_CMD_PREFIX bash -c "export PATH=$BASE_SCRATCH_DIR/bins/:\$PATH && cd $P_CI_DIR && $*" +} export -f DOCKER_EXEC if [ -n "$DPKG_ADD_ARCH" ]; then From fa0d5ee1126a8cff9f30f863eb8f5c78bf57e168 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 30 May 2020 07:56:31 -0400 Subject: [PATCH 3/9] ci: Set halt_on_error=1 for tsan --- ci/test/04_install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test/04_install.sh b/ci/test/04_install.sh index 8be0d5646d..165983d906 100755 --- a/ci/test/04_install.sh +++ b/ci/test/04_install.sh @@ -24,7 +24,7 @@ mkdir -p "${PREVIOUS_RELEASES_DIR}" export ASAN_OPTIONS="detect_stack_use_after_return=1:check_initialization_order=1:strict_init_order=1" export LSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/lsan" -export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan:log_path=${BASE_SCRATCH_DIR}/sanitizer-output/tsan" +export TSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/tsan:halt_on_error=1:log_path=${BASE_SCRATCH_DIR}/sanitizer-output/tsan" export UBSAN_OPTIONS="suppressions=${BASE_ROOT_DIR}/test/sanitizer_suppressions/ubsan:print_stacktrace=1:halt_on_error=1:report_error_type=1" env | grep -E '^(BITCOIN_CONFIG|BASE_|QEMU_|CCACHE_|LC_ALL|BOOST_TEST_RANDOM|DEBIAN_FRONTEND|CONFIG_SHELL|(ASAN|LSAN|TSAN|UBSAN)_OPTIONS|PREVIOUS_RELEASES_DIR)' | tee /tmp/env if [[ $HOST = *-mingw32 ]]; then From fa10d850790bbe52d948659bb1ebbb88fe718065 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 30 May 2020 07:50:06 -0400 Subject: [PATCH 4/9] ci: Use libc++ instead of libstdc++ for tsan --- .travis.yml | 2 +- ci/test/00_setup_env_native_tsan.sh | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1598813ed2..5550de12d6 100644 --- a/.travis.yml +++ b/.travis.yml @@ -112,7 +112,7 @@ jobs: FILE_ENV="./ci/test/00_setup_env_native_qt5.sh" - stage: test - name: 'x86_64 Linux [GOAL: install] [bionic] [no depends, only system libs, sanitizers: thread (TSan), no wallet]' + name: 'x86_64 Linux [GOAL: install] [focal] [depends, sanitizers: thread (TSan), no wallet, no gui]' # Not enough memory on travis machines, so feature_block is excluded for now env: >- TEST_RUNNER_EXTRA="--exclude feature_block" diff --git a/ci/test/00_setup_env_native_tsan.sh b/ci/test/00_setup_env_native_tsan.sh index 63d06dea64..a5ce791114 100644 --- a/ci/test/00_setup_env_native_tsan.sh +++ b/ci/test/00_setup_env_native_tsan.sh @@ -7,8 +7,8 @@ export LC_ALL=C.UTF-8 export CONTAINER_NAME=ci_native_tsan -export DOCKER_NAME_TAG=ubuntu:18.04 -export PACKAGES="clang-9 llvm-9 python3-zmq qtbase5-dev qttools5-dev-tools libevent-dev bsdmainutils libboost-system-dev libboost-filesystem-dev libboost-test-dev libboost-thread-dev libdb5.3++-dev libminiupnpc-dev libzmq3-dev libqrencode-dev" -export NO_DEPENDS=1 +export DOCKER_NAME_TAG=ubuntu:20.04 +export PACKAGES="clang libc++abi-dev libc++-dev python3-zmq" +export DEP_OPTS="CC=clang CXX='clang++ -stdlib=libc++'" export GOAL="install" -export BITCOIN_CONFIG="--enable-zmq --disable-wallet --with-gui=qt5 CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=thread --disable-hardening --disable-asm CC=clang-9 CXX=clang++-9" +export BITCOIN_CONFIG="--enable-zmq --disable-wallet --with-gui=no CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=thread CC=clang CXX='clang++ -stdlib=libc++'" From fa906bf2988c799765a04c484269f890964ec3ee Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Fri, 29 May 2020 19:30:33 -0400 Subject: [PATCH 5/9] test: Extend tsan suppressions for clang stdlib --- test/sanitizer_suppressions/tsan | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/test/sanitizer_suppressions/tsan b/test/sanitizer_suppressions/tsan index 70eea34363..5031fa7053 100644 --- a/test/sanitizer_suppressions/tsan +++ b/test/sanitizer_suppressions/tsan @@ -1,6 +1,23 @@ # ThreadSanitizer suppressions # ============================ +# double locks (TODO fix) +mutex:g_genesis_wait_mutex +mutex:CThreadInterrupt +mutex:CConnman::Interrupt +mutex:CConnman::WakeMessageHandler +mutex:UpdateTip +# race (TODO fix) +race:CConnman::WakeMessageHandler +race:CConnman::ThreadMessageHandler +race:fHaveGenesis +race:ProcessNewBlock +race:ThreadImport +race:bitcoin-qt +# deadlock (TODO fix) +deadlock:CConnman::ForNode +deadlock:UpdateTip + # WalletBatch (unidentified deadlock) deadlock:WalletBatch From fa0cc02c0a029133f080680ae9186002a144738f Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sat, 30 May 2020 08:01:03 -0400 Subject: [PATCH 6/9] ci: Mute depends logs completely --- ci/test/05_before_script.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ci/test/05_before_script.sh b/ci/test/05_before_script.sh index 3685504524..efaaf154b1 100755 --- a/ci/test/05_before_script.sh +++ b/ci/test/05_before_script.sh @@ -33,7 +33,9 @@ if [ -z "$NO_DEPENDS" ]; then else SHELL_OPTS="CONFIG_SHELL=" fi - DOCKER_EXEC $SHELL_OPTS make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS + # Temporary workaround for https://github.com/bitcoin/bitcoin/issues/16368 + python3 -c 'import time; [print(".") or time.sleep(500) for _ in range(4)]' & + ( DOCKER_EXEC $SHELL_OPTS make $MAKEJOBS -C depends HOST=$HOST $DEP_OPTS ) &> /dev/null fi if [ -n "$PREVIOUS_RELEASES_TO_DOWNLOAD" ]; then BEGIN_FOLD previous-versions From fa563cef61e8a217c5e8ec059e174afae61087a5 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sun, 31 May 2020 10:54:30 -0400 Subject: [PATCH 7/9] test: Add more tsan suppressions --- test/sanitizer_suppressions/tsan | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/sanitizer_suppressions/tsan b/test/sanitizer_suppressions/tsan index 5031fa7053..f71599d92f 100644 --- a/test/sanitizer_suppressions/tsan +++ b/test/sanitizer_suppressions/tsan @@ -3,16 +3,22 @@ # double locks (TODO fix) mutex:g_genesis_wait_mutex +mutex:Interrupt mutex:CThreadInterrupt mutex:CConnman::Interrupt mutex:CConnman::WakeMessageHandler +mutex:CConnman::ThreadOpenConnections +mutex:CConnman::ThreadOpenAddedConnections +mutex:CConnman::SocketHandler mutex:UpdateTip +mutex:PeerLogicValidation::UpdatedBlockTip # race (TODO fix) race:CConnman::WakeMessageHandler race:CConnman::ThreadMessageHandler race:fHaveGenesis race:ProcessNewBlock race:ThreadImport +race:zmq::* race:bitcoin-qt # deadlock (TODO fix) deadlock:CConnman::ForNode From fa7c8509153bfd2d5b4dcff86ad27dfd73e8788b Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sun, 31 May 2020 18:37:47 -0400 Subject: [PATCH 8/9] ci: Install llvm to get llvm symbolizer --- ci/test/00_setup_env_native_tsan.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/test/00_setup_env_native_tsan.sh b/ci/test/00_setup_env_native_tsan.sh index a5ce791114..99cf9cd182 100644 --- a/ci/test/00_setup_env_native_tsan.sh +++ b/ci/test/00_setup_env_native_tsan.sh @@ -8,7 +8,7 @@ export LC_ALL=C.UTF-8 export CONTAINER_NAME=ci_native_tsan export DOCKER_NAME_TAG=ubuntu:20.04 -export PACKAGES="clang libc++abi-dev libc++-dev python3-zmq" +export PACKAGES="clang llvm libc++abi-dev libc++-dev python3-zmq" export DEP_OPTS="CC=clang CXX='clang++ -stdlib=libc++'" export GOAL="install" export BITCOIN_CONFIG="--enable-zmq --disable-wallet --with-gui=no CPPFLAGS='-DARENA_DEBUG -DDEBUG_LOCKORDER' --with-sanitizers=thread CC=clang CXX='clang++ -stdlib=libc++'" From faf62e6ed0ca45db44c370844c3515eb5a8cda12 Mon Sep 17 00:00:00 2001 From: MarcoFalke Date: Sun, 31 May 2020 18:52:59 -0400 Subject: [PATCH 9/9] ci: Remove unused workaround --- ci/test/03_before_install.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ci/test/03_before_install.sh b/ci/test/03_before_install.sh index e939b9eeeb..80806aab75 100755 --- a/ci/test/03_before_install.sh +++ b/ci/test/03_before_install.sh @@ -6,10 +6,6 @@ export LC_ALL=C.UTF-8 -# Add llvm-symbolizer directory to PATH. Needed to get symbolized stack traces from the sanitizers. -PATH=$PATH:/usr/lib/llvm-6.0/bin/ -export PATH - BEGIN_FOLD () { echo "" CURRENT_FOLD_NAME=$1