On master and 0.17 steps to reproduce:
git checkout bitcoin/master && make distclean
./configure --with-sanitizers=thread CC=clang CXX=clang++
make -j 16 check
On master and 0.17 steps to reproduce:
git checkout bitcoin/master && make distclean
./configure --with-sanitizers=thread CC=clang CXX=clang++
make -j 16 check
Also, I saw one travis job hit a segfault in this test (can't recall the job right now) @skeees Any guess on this?
oh, i should have remembered this. the BOOST_CHECK_* are not thread safe. If i change to asserts it resolves the issue, submitting now
Ah thanks.
Seems there is one warning left in the processnewblock_signals_ordering test. The reason for that warning is that block.fChecked is not atomic, so one thread could write to it while another could read from it. The primitive fix would be to make the member std::atomic.
This one is less simple because making that an atomic will delete the automatically generated copy constructors / assignment from CBlock - which means they'll need to be manually declared. Any thoughts?
I have a branch with that change here: https://github.com/bitcoin/bitcoin/compare/master...skeees:fchecked-atomic?expand=1