Commit graph

3234 commits

Author SHA1 Message Date
Andrew Poelstra
89ca8ea199 Merge b3ec1fe811 into merged_master (Bitcoin PR #18890) 2020-11-26 01:09:01 +00:00
Andrew Poelstra
18a2a37ece Merge b1b1739944 into merged_master (Bitcoin PR #18968) 2020-11-26 01:09:00 +00:00
Andrew Poelstra
1044c64be3 Merge 17cfa52d38 into merged_master (Bitcoin PR #19172) 2020-11-26 01:08:59 +00:00
Andrew Poelstra
87dc4ce088 Merge b55b5b6c3d into merged_master (Bitcoin PR #19164) 2020-11-26 01:08:59 +00:00
Andrew Poelstra
195eb8a243 Merge 4ede05d421 into merged_master (Bitcoin PR #18758) 2020-11-26 01:08:58 +00:00
Andrew Poelstra
d5082ffa37 Merge 39afe5b1c6 into merged_master (Bitcoin PR #19082) 2020-11-26 01:08:58 +00:00
Andrew Poelstra
9324c8c542 Merge 365f1082e1 into merged_master (Bitcoin PR #19112) 2020-11-26 01:08:58 +00:00
Andrew Poelstra
b8d665f61a Merge b46fb5cb10 into merged_master (Bitcoin PR #19131) 2020-11-26 01:08:58 +00:00
Andrew Poelstra
67f55c5173 Merge 234fabab90 into merged_master (Bitcoin PR #18210) 2020-11-26 01:08:57 +00:00
Andrew Poelstra
5d22dc9e40 Merge 575589a62e into merged_master (Bitcoin PR #19041) 2020-11-26 01:08:57 +00:00
Andrew Poelstra
92f57dee9c Merge bdedfcf076 into merged_master (Bitcoin PR #18974) 2020-11-26 01:08:57 +00:00
Andrew Poelstra
c8459659ed Merge 3657aee2d2 into merged_master (Bitcoin PR #18982) 2020-11-26 01:08:56 +00:00
Andrew Poelstra
492c24eba5 Merge 45a1489997 into merged_master (Bitcoin PR #19122) 2020-11-26 01:08:56 +00:00
Andrew Poelstra
207e69c339 Merge a8327fd71f into merged_master (Bitcoin PR #19072) 2020-11-26 01:08:55 +00:00
Andrew Poelstra
927a580a42 Merge 07d0e0d59f into merged_master (Bitcoin PR #19044) 2020-11-26 01:08:55 +00:00
Andrew Poelstra
b23acd5046 Merge dec067f5a0 into merged_master (Bitcoin PR #18965) 2020-11-26 01:08:54 +00:00
Andrew Poelstra
531cdf3ca5 Merge 826fe9c667 into merged_master (Bitcoin PR #18807) 2020-11-26 01:08:54 +00:00
Andrew Poelstra
29f0416f1c Merge e478b11db0 into merged_master (Bitcoin PR #19110) 2020-11-26 01:08:54 +00:00
Andrew Poelstra
9410608056 Merge c19fd96694 into merged_master (Bitcoin PR #19022) 2020-11-26 01:08:54 +00:00
Andrew Poelstra
d38085da61 Merge 520e435b5e into merged_master (Bitcoin PR #18918) 2020-11-26 01:08:51 +00:00
Andrew Poelstra
d79ece79c4 Merge 4af01b37d4 into merged_master (Bitcoin PR #19060) 2020-11-26 01:08:50 +00:00
Andrew Poelstra
62a9d9569c Merge 7d32cce3e7 into merged_master (Bitcoin PR #19010) 2020-11-26 01:08:50 +00:00
Andrew Poelstra
3b7c182626 Merge 24f7029064 into merged_master (Bitcoin PR #18594) 2020-11-26 01:08:49 +00:00
Andrew Poelstra
1fca452fcd Merge b5c423c48e into merged_master (Bitcoin PR #19014) 2020-11-26 01:08:49 +00:00
Andrew Poelstra
5800ec9196 Merge ccd85b57af into merged_master (Bitcoin PR #17681) 2020-11-26 01:08:48 +00:00
Andrew Poelstra
d0b2badc94 Merge ad3a61c5f5 into merged_master (Bitcoin PR #18895) 2020-11-26 01:08:48 +00:00
Andrew Poelstra
f785ad353f Merge 99e5e21b38 into merged_master (Bitcoin PR #19023) 2020-11-26 01:08:48 +00:00
Andrew Poelstra
13f4a26538 Merge cfe22a5f9e into merged_master (Bitcoin PR #18530) 2020-11-26 01:08:47 +00:00
Andrew Poelstra
b29efd4af5 Merge 3eda7ea9ba into merged_master (Bitcoin PR #18764) 2020-11-26 01:08:47 +00:00
Andrew Poelstra
e1d89a5742 Merge bd5ec7c528 into merged_master (Bitcoin PR #19006) 2020-11-26 01:08:46 +00:00
Andrew Poelstra
2a9f3c220f Merge aa8d76806c into merged_master (Bitcoin PR #17946) 2020-11-26 01:08:46 +00:00
Andrew Poelstra
dccd3297b0 Merge 362f9c60a5 into merged_master (Bitcoin PR #18986) 2020-11-26 01:08:45 +00:00
Andrew Poelstra
6a447f792f Merge f8123d483c into merged_master (Bitcoin PR #18952) 2020-11-26 01:08:45 +00:00
Andrew Poelstra
098fff6e44 Merge a9a6d946e4 into merged_master (Bitcoin PR #18888) 2020-11-26 01:08:43 +00:00
Andrew Poelstra
39493d33b7 Merge 99c03728c0 into merged_master (Bitcoin PR #18878) 2020-11-26 01:08:43 +00:00
Andrew Poelstra
9ac62395d7 Merge e45fb7e0d2 into merged_master (Bitcoin PR #18877) 2020-11-26 01:08:42 +00:00
Andrew Poelstra
bf32589a16 Merge 4fa3157014 into merged_master (Bitcoin PR #18929) 2020-11-26 01:08:41 +00:00
Andrew Poelstra
bda1054131 Merge 7a5767423f into merged_master (Bitcoin PR #18808) 2020-11-26 01:08:41 +00:00
Andrew Poelstra
34d072006e Merge 376294cde6 into merged_master (Bitcoin PR #18866) 2020-11-26 01:08:40 +00:00
Andrew Poelstra
bb1ada83c9 Merge 3930014abc into merged_master (Bitcoin PR #18864) 2020-11-26 01:08:40 +00:00
Andrew Poelstra
e42dc5493b Merge 7bcc42b403 into merged_master (Bitcoin PR #18873) 2020-11-26 01:08:39 +00:00
Andrew Poelstra
e991e7713b Merge d96fdc2a39 into merged_master (Bitcoin PR #18741) 2020-11-26 01:08:38 +00:00
Andrew Poelstra
d4711bdf91 Merge 23c926d859 into merged_master (Bitcoin PR #18699) 2020-11-26 01:08:37 +00:00
Andrew Poelstra
e58322b8aa Merge 2e6a16b968 into merged_master (Bitcoin PR #18855) 2020-11-26 01:08:36 +00:00
Andrew Poelstra
cdc4c006f4 Merge cce034b028 into merged_master (Bitcoin PR #18839) 2020-11-26 01:08:36 +00:00
Andrew Poelstra
c0fda0cc05 Merge ddc0a600b3 into merged_master (Bitcoin PR #18617)
For reasons I do not really grok, this PR changes the timing behavior of the
functional tests to reliably expose a deadlock in the claimpegin RPC that has
existed since the 0.17 rebase.

The mechanism is: in `claimpegin` in src/wallet/rpcwallet.cpp:5873, we call
`AcceptToMemoryPoolWorker`. This requires cs_main to be locked, which it is
not (contrast Core's `testmempoolaccept` RPC, which similarly calls
`AcceptToMemoryPoolWorker` from the RPC thread, and locks cs_main immediately
before).

We do *say* that it is locked, in the `LockAssertion` one the line above, but
this was added in ad3d496d78 during the 0.17
rebase (PR #620), apparently to shut up some linter on OSX, and as near as I
can tell it was never true.

Anyway, `AcceptToMemoryPoolWorker` calls through a couple layers which assume
cs_main is locked, to `AcceptSingleTransaction`, which locks m_pool.cs on line
src/validation.cpp:1101. It then calls `PreChecks`, which on line 784 calls
::ChainActive(), which _actually_ locks cs_main, though only briefly. This
line is the deadlock, because we locked m_pool.cs followed by cs_main...

...meanwhile, in src/net_processing.cpp, we lock cs_main at the top of the
`PeerLogicValidation::SendMessages` loop (src/net_processing.cpp:3628). In the
same loop, in the `feefilter` message processing, we call CTxMemPool::GetMinFee
(src/net_processing.cpp:4137), which locks m_pool.cs. Deadlock.

Anyway, that explains the change to locking behavior that I added to an
otherwise test-only PR.
2020-11-26 01:08:36 +00:00
Andrew Poelstra
2d0adcc65b Merge 844d2070a2 into merged_master (Bitcoin PR #18828) 2020-11-26 01:08:35 +00:00
Andrew Poelstra
503f615f81 Merge a66ba6d029 into merged_master (Bitcoin PR #18576) 2020-11-26 01:08:35 +00:00
Andrew Poelstra
87ae5b27e7 Merge 36c0abd8f6 into merged_master (Bitcoin PR #18726) 2020-11-26 01:08:34 +00:00
Andrew Poelstra
252c3a223c Merge 978c5a2122 into merged_master (Bitcoin PR #18485) 2020-11-26 01:08:33 +00:00