Page MenuHomePhabricator

[avalanche] Fix wrong local proof status when a replacement one is received over p2p
ClosedPublic

Authored by Fabien on Jul 9 2025, 13:30.

Details

Summary

There is an edge case where a replacement proof exists and is received over p2p, moving the local proof to the conflicting pool. If this proof was previously verified the status will be showing "pending verification" instead of "conflicting-utxos". This diff fixes this bug.

Test Plan
ninja all check-all

Diff Detail

Repository
rABC Bitcoin ABC
Lint
Lint Not Applicable
Unit
Tests Not Applicable

Event Timeline

Fabien requested review of this revision.Jul 9 2025, 13:30

Tail of the build log:

[416/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[417/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[418/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[419/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[420/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[421/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[422/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[423/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[424/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[425/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[426/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[427/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[428/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[429/586] Installing component secp256k1
-- Install configuration: "RelWithDebInfo"
-- Install component: "secp256k1"
-- Installing: /results/artifacts/lib/libsecp256k1.a
-- Installing: /results/artifacts/include/secp256k1.h
-- Installing: /results/artifacts/include/secp256k1_preallocated.h
-- Installing: /results/artifacts/include/secp256k1_recovery.h
-- Installing: /results/artifacts/include/secp256k1_schnorr.h
[430/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[431/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[432/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[433/586] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[434/586] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[435/586] Linking CXX static library src/libbitcoinconsensus.a
[436/586] Linking C executable src/secp256k1/sign-bench
[437/586] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[438/586] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[439/586] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[440/586] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[441/586] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[442/586] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[443/586] Linking C executable src/secp256k1/ecmult-bench
[444/586] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[445/586] Linking C executable src/secp256k1/verify-bench
[446/586] Linking C executable src/secp256k1/internal-bench
[447/586] Linking C executable src/secp256k1/recover-bench
[448/586] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[449/586] Linking CXX static library src/libscript.a
[450/586] Linking CXX static library src/libcommon.a
[451/586] Linking CXX shared library src/libbitcoinconsensus.so.0.31.8
[452/586] Creating library symlink src/libbitcoinconsensus.so.0 src/libbitcoinconsensus.so
[453/586] Linking CXX executable src/iguana/iguana
[454/586] Linking CXX executable src/bitcoin-tx
[455/586] Linking CXX executable src/bitcoin-cli
[456/586] Linking CXX static library src/wallet/libwallet.a
[457/586] Building CXX object src/CMakeFiles/server.dir/avalanche/processor.cpp.o
FAILED: src/CMakeFiles/server.dir/avalanche/processor.cpp.o 
/usr/bin/ccache /usr/bin/clang++ -DBOOST_ALL_NO_LIB -DBOOST_NO_CXX98_FUNCTION_BASE -DBUILD_BITCOIN_INTERNAL -DENABLE_AVX2 -DENABLE_SHANI -DENABLE_SSE41 -DHAVE_BUILD_INFO -DHAVE_CONFIG_H -DHAVE_CONSENSUS_LIB -DLEVELDB_ATOMIC_PRESENT -DLEVELDB_PLATFORM_POSIX -DOS_LINUX -I/work/src/leveldb/helpers/memenv -I/work/src/. -I/work/abc-ci-builds/build-clang/src -I/work/src/univalue/include -I/work/abc-ci-builds/build-clang/src/crypto/.. -I/work/src/secp256k1/include -I/work/src/leveldb/include -isystem /usr/include/jemalloc -isystem /usr/include/miniupnpc -Werror -g -O2 -fPIC -fvisibility=hidden -fstack-protector-all -Wstack-protector -fcf-protection=full -fstack-clash-protection -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -Wall -Wextra -Wformat -Wgnu -Wvla -Wcast-align -Wunused-parameter -Wmissing-braces -Wthread-safety -Wrange-loop-analysis -Wredundant-decls -Wunreachable-code-loop-increment -Wsign-compare -Wconditional-uninitialized -Wdocumentation -Wformat-security -Wredundant-move -Woverloaded-virtual -Wshadow -Wshadow-field -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-psabi -std=gnu++17 -MD -MT src/CMakeFiles/server.dir/avalanche/processor.cpp.o -MF src/CMakeFiles/server.dir/avalanche/processor.cpp.o.d -o src/CMakeFiles/server.dir/avalanche/processor.cpp.o -c /work/src/avalanche/processor.cpp
/work/src/avalanche/processor.cpp:776:9: error: calling function 'MaybeCheckNotHeld' requires negative capability '!cs_peerManager' [-Werror,-Wthread-safety-analysis]
        WITH_LOCK(cs_peerManager, return peerManager->isInConflictingPool(
        ^
/work/src/./sync.h:358:6: note: expanded from macro 'WITH_LOCK'
    (MaybeCheckNotHeld(cs), [&]() -> decltype(auto) {                          \
     ^
1 error generated.
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang failed with exit code 1
Fabien planned changes to this revision.Jul 9 2025, 13:39

Tail of the build log:

[399/584] Building C object src/secp256k1/CMakeFiles/ecmult-bench.dir/src/bench_ecmult.c.o
[400/584] Linking C executable src/secp256k1/ecmult-bench
[401/584] Building CXX object src/CMakeFiles/bitcoin-cli.dir/bitcoin-cli.cpp.o
[402/584] Linking CXX executable src/bitcoin-cli
[403/584] Building CXX object src/CMakeFiles/bitcoind.dir/bitcoind.cpp.o
[404/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/logging.cpp.o
[405/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/str.cpp.o
[406/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockindex.cpp.o
[407/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/coins.cpp.o
[408/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/random.cpp.o
[409/584] Building CXX object src/CMakeFiles/server.dir/wallet/init.cpp.o
[410/584] Building CXX object src/CMakeFiles/bitcoin-tx.dir/bitcoin-tx.cpp.o
[411/584] Linking CXX executable src/bitcoin-tx
[412/584] Building CXX object src/CMakeFiles/bitcoin-wallet.dir/bitcoin-wallet.cpp.o
[413/584] Building CXX object src/CMakeFiles/server.dir/rpc/blockchain.cpp.o
[414/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/blockfilter.cpp.o
[415/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/context.cpp.o
[416/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/net.cpp.o
[417/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/transaction_utils.cpp.o
[418/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/db.cpp.o
[419/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/crypter.cpp.o
[420/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/coincontrol.cpp.o
[421/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/coinselection.cpp.o
[422/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/mining.cpp.o
[423/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/bdb.cpp.o
[424/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/validation.cpp.o
[425/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/txmempool.cpp.o
[426/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/wallet.cpp.o
[427/584] Building CXX object src/CMakeFiles/server.dir/validation.cpp.o
[428/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/fees.cpp.o
[429/584] Building CXX object src/test/CMakeFiles/testutil.dir/util/setup_common.cpp.o
[430/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/load.cpp.o
[431/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/receive.cpp.o
[432/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/transaction.cpp.o
[433/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/encrypt.cpp.o
[434/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/signmessage.cpp.o
[435/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/util.cpp.o
[436/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/sqlite.cpp.o
[437/584] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/dns.cpp.o
[438/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/salvage.cpp.o
[439/584] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/options.cpp.o
[440/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/interfaces.cpp.o
[441/584] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/db.cpp.o
[442/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletutil.cpp.o
[443/584] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_interpreter.cpp.o
[444/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/spend.cpp.o
[445/584] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana_formatter.cpp.o
[446/584] Building CXX object src/iguana/CMakeFiles/iguana.dir/iguana.cpp.o
[447/584] Linking CXX executable src/iguana/iguana
[448/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/scriptpubkeyman.cpp.o
[449/584] Building CXX object src/seeder/CMakeFiles/bitcoin-seeder.dir/main.cpp.o
[450/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpc/backup.cpp.o
[451/584] Building CXX object src/seeder/CMakeFiles/seeder-base.dir/bitcoin.cpp.o
[452/584] Building CXX object src/wallet/CMakeFiles/wallet-tool.dir/wallettool.cpp.o
[453/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/walletdb.cpp.o
[454/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/wallet.cpp.o
[455/584] Building CXX object src/wallet/CMakeFiles/wallet.dir/rpcwallet.cpp.o
[456/584] Linking CXX static library src/wallet/libwallet.a
ninja: build stopped: cannot make progress due to previous errors.
Build build-clang-tidy failed with exit code 1

Add thread safety annotations

This revision is now accepted and ready to land.Jul 10 2025, 06:39