Merge #5951: backport: trivial 2024 03 22

d5d1a714fb Merge bitcoin/bitcoin#24390: test: Remove suppression no longer needed with headers-only Boost.Test (fanquake)
51630d2e5e Merge bitcoin/bitcoin#22824: refactor: remove RecursiveMutex cs_nBlockSequenceId (MarcoFalke)
a9b1575fe8 Merge bitcoin/bitcoin#22781: wallet: fix the behavior of IsHDEnabled, return false in case of a blank hd wallet. (Samuel Dobson)
0505229c89 Merge bitcoin/bitcoin#22327: cli: Avoid truncating -rpcwaittimeout (MarcoFalke)
1dc97c7679 Merge bitcoin/bitcoin#22149: test: Add temporary logging to debug #20975 (W. J. van der Laan)
44f91cbc9a Merge #21597: test: Document race:validation_chainstatemanager_tests suppression (fanquake)
c326830f48 Merge bitcoin-core/gui#243: fix issue when disabling the auto-enabled blank wallet checkbox (MarcoFalke)
267f42fd6a Merge #21382: build: Clean remnants of QTBUG-34748 fix (fanquake)
1fcc5f1101 Merge #20540: test: Fix wallet_multiwallet issue on windows (MarcoFalke)
4afbaf2ea1 Merge #20322: test: Fix intermittent issue in wallet_listsinceblock (MarcoFalke)

Pull request description:

  ## Issue being fixed or feature implemented
  Batch of backports

  ## What was done?
  Trivial batch of backports

  ## How Has This Been Tested?
  CI looks good

  ## Breaking Changes
  None

  ## Checklist:
  - [x] I have performed a self-review of my own code
  - [ ] I have commented my code, particularly in hard-to-understand areas
  - [ ] I have added or updated relevant unit/integration/functional/e2e tests
  - [ ] I have made corresponding changes to the documentation
  - [x] I have assigned this pull request to a milestone _(for repository code-owners and collaborators only)_

Top commit has no ACKs.

Tree-SHA512: 8eeac54f011eb1111888c745dd56184ac9601de290f2b0f7b7ad02240e8dc1cab5a47fed26bfed2bd6f1066e0710827a3e5b2426f0bf66821cf1cd09099d5160
This commit is contained in:
pasta 2024-03-25 22:45:59 -05:00
commit f2a42a01b1
No known key found for this signature in database
GPG Key ID: 52527BEDABE87984
10 changed files with 25 additions and 24 deletions

View File

@ -19,17 +19,12 @@ $(package)_config_opts += --disable-xtest --disable-xv --disable-xvmc
endef endef
define $(package)_preprocess_cmds define $(package)_preprocess_cmds
cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux &&\ cp -f $(BASEDIR)/config.guess $(BASEDIR)/config.sub build-aux && \
sed "s/pthread-stubs//" -i configure sed "s/pthread-stubs//" -i configure
endef endef
# Don't install xcb headers to the default path in order to work around a qt
# build issue: https://bugreports.qt.io/browse/QTBUG-34748
# When using qt's internal libxcb, it may end up finding the real headers in
# depends staging. Use a non-default path to avoid that.
define $(package)_config_cmds define $(package)_config_cmds
$($(package)_autoconf) --includedir=$(host_prefix)/include/xcb-shared $($(package)_autoconf)
endef endef
define $(package)_build_cmds define $(package)_build_cmds
@ -41,5 +36,5 @@ define $(package)_stage_cmds
endef endef
define $(package)_postprocess_cmds define $(package)_postprocess_cmds
rm -rf share/man share/doc lib/*.la rm -rf share lib/*.la
endef endef

View File

@ -735,7 +735,7 @@ static UniValue ConnectAndCallRPC(BaseRequestHandler* rh, const std::string& str
// Execute and handle connection failures with -rpcwait. // Execute and handle connection failures with -rpcwait.
const bool fWait = gArgs.GetBoolArg("-rpcwait", false); const bool fWait = gArgs.GetBoolArg("-rpcwait", false);
const int timeout = gArgs.GetArg("-rpcwaittimeout", DEFAULT_WAIT_CLIENT_TIMEOUT); const int timeout = gArgs.GetArg("-rpcwaittimeout", DEFAULT_WAIT_CLIENT_TIMEOUT);
const int64_t deadline = GetTime<std::chrono::seconds>().count() + timeout; const auto deadline{GetTime<std::chrono::microseconds>() + 1s * timeout};
do { do {
try { try {
@ -748,9 +748,9 @@ static UniValue ConnectAndCallRPC(BaseRequestHandler* rh, const std::string& str
} }
break; // Connection succeeded, no need to retry. break; // Connection succeeded, no need to retry.
} catch (const CConnectionFailed& e) { } catch (const CConnectionFailed& e) {
const int64_t now = GetTime<std::chrono::seconds>().count(); const auto now{GetTime<std::chrono::microseconds>()};
if (fWait && (timeout <= 0 || now < deadline)) { if (fWait && (timeout <= 0 || now < deadline)) {
UninterruptibleSleep(std::chrono::seconds{1}); UninterruptibleSleep(1s);
} else { } else {
throw CConnectionFailed(strprintf("timeout on transient error: %s", e.what())); throw CConnectionFailed(strprintf("timeout on transient error: %s", e.what()));
} }

View File

@ -52,6 +52,12 @@ CreateWalletDialog::CreateWalletDialog(QWidget* parent) :
} }
}); });
connect(ui->blank_wallet_checkbox, &QCheckBox::toggled, [this](bool checked) {
if (!checked) {
ui->disable_privkeys_checkbox->setChecked(false);
}
});
#ifndef USE_SQLITE #ifndef USE_SQLITE
ui->descriptor_checkbox->setToolTip(tr("Compiled without sqlite support (required for descriptor wallets)")); ui->descriptor_checkbox->setToolTip(tr("Compiled without sqlite support (required for descriptor wallets)"));
ui->descriptor_checkbox->setEnabled(false); ui->descriptor_checkbox->setEnabled(false);

View File

@ -3688,10 +3688,7 @@ void CChainState::ReceivedBlockTransactions(const CBlock& block, CBlockIndex* pi
CBlockIndex *pindex = queue.front(); CBlockIndex *pindex = queue.front();
queue.pop_front(); queue.pop_front();
pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx; pindex->nChainTx = (pindex->pprev ? pindex->pprev->nChainTx : 0) + pindex->nTx;
{ pindex->nSequenceId = nBlockSequenceId++;
LOCK(cs_nBlockSequenceId);
pindex->nSequenceId = nBlockSequenceId++;
}
if (m_chain.Tip() == nullptr || !setBlockIndexCandidates.value_comp()(pindex, m_chain.Tip())) { if (m_chain.Tip() == nullptr || !setBlockIndexCandidates.value_comp()(pindex, m_chain.Tip())) {
if (!(pindex->nStatus & BLOCK_CONFLICT_CHAINLOCK)) { if (!(pindex->nStatus & BLOCK_CONFLICT_CHAINLOCK)) {
setBlockIndexCandidates.insert(pindex); setBlockIndexCandidates.insert(pindex);

View File

@ -629,9 +629,8 @@ protected:
* Every received block is assigned a unique and increasing identifier, so we * Every received block is assigned a unique and increasing identifier, so we
* know which one to give priority in case of a fork. * know which one to give priority in case of a fork.
*/ */
RecursiveMutex cs_nBlockSequenceId;
/** Blocks loaded from disk are assigned id 0, so start the counter at 1. */ /** Blocks loaded from disk are assigned id 0, so start the counter at 1. */
int32_t nBlockSequenceId = 1; int32_t nBlockSequenceId GUARDED_BY(::cs_main) = 1;
/** Decreasing counter (used by subsequent preciousblock calls). */ /** Decreasing counter (used by subsequent preciousblock calls). */
int32_t nBlockReverseSequenceId = -1; int32_t nBlockReverseSequenceId = -1;
/** chainwork for the last block that preciousblock has been applied to. */ /** chainwork for the last block that preciousblock has been applied to. */
@ -828,7 +827,7 @@ public:
void PruneBlockIndexCandidates(); void PruneBlockIndexCandidates();
void UnloadBlockIndex(); void UnloadBlockIndex() EXCLUSIVE_LOCKS_REQUIRED(::cs_main);
/** Check whether we are doing an initial block download (synchronizing from disk or network) */ /** Check whether we are doing an initial block download (synchronizing from disk or network) */
bool IsInitialBlockDownload() const; bool IsInitialBlockDownload() const;

View File

@ -1617,9 +1617,10 @@ CAmount CWallet::GetChange(const CTransaction& tx) const
bool CWallet::IsHDEnabled() const bool CWallet::IsHDEnabled() const
{ {
// All Active ScriptPubKeyMans must be HD for this to be true // All Active ScriptPubKeyMans must be HD for this to be true
bool result = true; bool result = false;
for (const auto& spk_man : GetActiveScriptPubKeyMans()) { for (const auto& spk_man : GetActiveScriptPubKeyMans()) {
result &= spk_man->IsHDEnabled(); if (!spk_man->IsHDEnabled()) return false;
result = true;
} }
return result; return result;
} }

View File

@ -223,6 +223,11 @@ def create_raw_transaction(node, txid, to_address, *, amount):
signed_psbt = wrpc.walletprocesspsbt(psbt) signed_psbt = wrpc.walletprocesspsbt(psbt)
psbt = signed_psbt['psbt'] psbt = signed_psbt['psbt']
final_psbt = node.finalizepsbt(psbt) final_psbt = node.finalizepsbt(psbt)
if not final_psbt["complete"]:
node.log.info(f'final_psbt={final_psbt}')
for w in node.listwallets():
wrpc = node.get_wallet_rpc(w)
node.log.info(f'listunspent={wrpc.listunspent()}')
assert_equal(final_psbt["complete"], True) assert_equal(final_psbt["complete"], True)
return final_psbt['hex'] return final_psbt['hex']

View File

@ -192,6 +192,7 @@ class ListSinceBlockTest(BitcoinTestFramework):
address = key_to_p2pkh(eckey.get_pubkey().get_bytes()) address = key_to_p2pkh(eckey.get_pubkey().get_bytes())
self.nodes[2].sendtoaddress(address, 10) self.nodes[2].sendtoaddress(address, 10)
self.nodes[2].generate(6) self.nodes[2].generate(6)
self.sync_all()
self.nodes[2].importprivkey(privkey) self.nodes[2].importprivkey(privkey)
utxos = self.nodes[2].listunspent() utxos = self.nodes[2].listunspent()
utxo = [u for u in utxos if u["address"] == address][0] utxo = [u for u in utxos if u["address"] == address][0]

View File

@ -130,7 +130,7 @@ class MultiWalletTest(BitcoinTestFramework):
os.mkdir(wallet_dir('no_access')) os.mkdir(wallet_dir('no_access'))
os.chmod(wallet_dir('no_access'), 0) os.chmod(wallet_dir('no_access'), 0)
try: try:
with self.nodes[0].assert_debug_log(expected_msgs=['Too many levels of symbolic links', 'Error scanning']): with self.nodes[0].assert_debug_log(expected_msgs=['Error scanning']):
walletlist = self.nodes[0].listwalletdir()['wallets'] walletlist = self.nodes[0].listwalletdir()['wallets']
finally: finally:
# Need to ensure access is restored for cleanup # Need to ensure access is restored for cleanup

View File

@ -6,9 +6,6 @@
# Data races from zmq namespace # Data races from zmq namespace
race:zmq::* race:zmq::*
# race (TODO fix)
race:validation_chainstatemanager_tests
# double locks (TODO fix) # double locks (TODO fix)
mutex:g_genesis_wait_mutex mutex:g_genesis_wait_mutex
mutex:Interrupt mutex:Interrupt