bitcoin/ci/test
Wladimir J. van der Laan 9996b1806a
Merge #21064: refactor: use std::shared_mutex & remove Boost Thread
060a2a64d4 ci: remove boost thread installation (fanquake)
06e1d7d81d build: don't build or use Boost Thread (fanquake)
7097add83c refactor: replace Boost shared_mutex with std shared_mutex in sigcache (fanquake)
8e55981ef8 refactor: replace Boost shared_mutex with std shared_mutex in cuckoocache tests (fanquake)

Pull request description:

  This replaces `boost::shared_mutex` and `boost::unique_lock` with [`std::shared_mutex`](https://en.cppreference.com/w/cpp/thread/shared_mutex) & [`std::unique_lock`](https://en.cppreference.com/w/cpp/thread/unique_lock).

  Even though [some concerns were raised](https://github.com/bitcoin/bitcoin/issues/16684#issuecomment-726214696) in #16684 with regard to `std::shared_mutex` being unsafe to use across some glibc versions, I still think this change is an improvement. As I mentioned in #21022, I also think trying to restrict standard library feature usage based on bugs in glibc is not only hard to do, but it's not currently clear exactly how we do that in practice (does it also extend to patching out use in our dependencies, should we be implementing more runtime checks for features we are using, when do we consider an affected glibc "old enough" not to worry about? etc). If you take a look through the [glibc bug tracker](https://sourceware.org/bugzilla/describecomponents.cgi?product=glibc) you'll no doubt find plenty of (active) bug reports for standard library code we already using. Obviously not to say we shouldn't try and avoid buggy code where possible.

  Two other points:

  [Cory mentioned in #21022](https://github.com/bitcoin/bitcoin/pull/21022#issuecomment-769274179):
  > It also seems reasonable to me to worry that boost hits the same underlying glibc bug, and we've just not happened to trigger the right conditions yet.

  Moving away from Boost to the standard library also removes the potential for differences related to Boosts configuration. Boost has multiple versions of `shared_mutex`, and what you end up using, and what it's backed by depends on:
  * The version of Boost.
  * The platform you're building for.
  * Which version of `BOOST_THREAD_VERSION` is defined: (2,3,4 or 5) default=2. (see [here](https://www.boost.org/doc/libs/1_70_0/doc/html/thread/build.html#thread.build.configuration) for some of the differences).
  * Is `BOOST_THREAD_V2_SHARED_MUTEX` defined? (not by default). If so, you might get the ["less performant, but more robust"](https://github.com/boostorg/thread/issues/230#issuecomment-475937761) version of `shared_mutex`.

  A lot of these factors are eliminated by our use of depends, but users will have varying configurations. It's also not inconceivable to think that a distro, or some package manager might start defining something like `BOOST_THREAD_VERSION=3`. Boost tried to change the default from 2 to 3 at one point.

  With this change, we no longer use Boost Thread, so this PR also removes it from depends, the build system, CI etc.

  Previous similar PRs were #19183 & #20922. The authors are included in the commits here.
  Also related to #21022 - pthread sanity checking.

ACKs for top commit:
  laanwj:
    Code review ACK 060a2a64d4
  vasild:
    ACK 060a2a64d4

Tree-SHA512: 572d14d8c9de20bc434511f20d3f431836393ff915b2fe9de5a47a02dca76805ad5c3fc4cceecb4cd43f3ba939a0508178c4e60e62abdbaaa6b3e8db20b75b03
2021-02-12 11:39:36 +01:00
..
00_setup_env_arm.sh ci: Build with --enable-werror by default, and document exceptions 2020-12-03 20:51:39 +02:00
00_setup_env_i686_centos.sh depends: Do not force Precompiled Headers (PCH) for building Qt on Linux 2020-12-02 13:49:25 +02:00
00_setup_env_mac_host.sh ci: Build with --enable-werror by default, and document exceptions 2020-12-03 20:51:39 +02:00
00_setup_env_mac.sh ci: use Ubuntu Focal for macOS cross build 2021-02-09 13:58:59 +08:00
00_setup_env_native_asan.sh ci: remove boost thread installation 2021-02-02 12:38:22 +08:00
00_setup_env_native_fuzz_with_valgrind.sh ci: remove boost thread installation 2021-02-02 12:38:22 +08:00
00_setup_env_native_fuzz.sh ci: remove boost thread installation 2021-02-02 12:38:22 +08:00
00_setup_env_native_msan.sh depends: build zeromq with -std=c++17 2020-11-24 10:18:06 +08:00
00_setup_env_native_multiprocess.sh [ci] use boost::process 2020-07-31 13:38:10 +02:00
00_setup_env_native_nowallet.sh build: Require C++17 compiler 2020-11-18 15:15:04 +01:00
00_setup_env_native_qt5.sh build: build fuzz tests by default. 2021-02-05 19:52:45 -05:00
00_setup_env_native_tsan.sh ci: no-longer exclude feature_block in TSAN job 2020-12-02 16:42:07 +08:00
00_setup_env_native_valgrind.sh ci: remove boost thread installation 2021-02-02 12:38:22 +08:00
00_setup_env_s390x.sh ci: Set LC_ALL=C to allow running the s390x tests in qemu 2020-11-05 12:54:51 +01:00
00_setup_env_win64.sh ci: Properly bump to focal for win cross build 2021-02-09 21:37:14 +01:00
00_setup_env.sh ci: Bump timeout factor 2020-11-03 19:44:57 +01:00
04_install.sh ci: Run i686 centos ci config on cirrus 2020-11-23 17:09:12 +01:00
05_before_script.sh ci: Drop travis_fold feature as Travis CI is no longer used 2020-12-17 22:02:12 +02:00
06_script_a.sh ci: Drop travis_fold feature as Travis CI is no longer used 2020-12-17 22:02:12 +02:00
06_script_b.sh ci: Drop travis_fold feature as Travis CI is no longer used 2020-12-17 22:02:12 +02:00
wrap-qemu.sh scripted-diff: Bump copyright headers 2020-12-31 09:45:41 +01:00
wrap-valgrind.sh scripted-diff: Bump copyright of files changed in 2019 2019-12-30 10:42:20 +13:00
wrap-wine.sh ci: Re-run wine tests once if they fail 2021-02-10 08:59:35 +01:00