HomePhabricator

Merge #18338: Fix wallet unload race condition

Description

Merge #18338: Fix wallet unload race condition

Summary:
41b0baf43c243b64b394e774e336475a489cca2b gui: Handle WalletModel::unload asynchronous (João Barbosa)
ab31b9d6fe7b39713682e3f52d11238dbe042c16 Fix wallet unload race condition (Russell Yanofsky)

Pull request description:

This PR consists in two fixes. The first fixes a concurrency issues with `boost::signals2`. The second fixes a wallet model destruction while it's being used.

From boost signal documentation at https://www.boost.org/doc/libs/1_72_0/doc/html/signals2/thread-safety.html:

> When a signal is invoked by calling signal::operator(), the invocation first acquires a lock on the signal's mutex. Then it obtains a handle to the signal's slot list and combiner. Next it releases the signal's mutex, before invoking the combiner to iterate through the slot list.

This means that `UnregisterValidationInterface` doesn't prevent more calls to that interface. The fix consists in capturing the `shared_ptr<CValidationInterface>` in each internal slot.

The GUI bug is fixed by using a `Qt::QueuedConnection` in the `WalletModel::unload` connection.

ACKs for top commit:

ryanofsky:
  Code review ACK 41b0baf43c243b64b394e774e336475a489cca2b. Only change is moving assert as suggested
hebasto:
  ACK 41b0baf43c243b64b394e774e336475a489cca2b, tested on Linux Mint 19.3.

Tree-SHA512: 4f712d8de65bc1214411831250de5dc0a9fd505fb84da5baf9f2cc4d551bc3abffc061616f00afe43dba7525af2cd96c9b54aeead9383145e3b8801f25d85f50

Backport of Core PR18338

Test Plan: ninja check check-functional for sanity

Reviewers: #bitcoin_abc, deadalnix

Reviewed By: #bitcoin_abc, deadalnix

Differential Revision: https://reviews.bitcoinabc.org/D6644

Details

Provenance
Wladimir J. van der Laan <laanwj@protonmail.com>Authored on Jun 18 2020, 23:24
abc-botCommitted on Jun 18 2020, 23:30
abc-botPushed on Jun 18 2020, 23:30
Reviewer
Restricted Project
Differential Revision
D6644: Merge #18338: Fix wallet unload race condition
Parents
rABC6f8ecc458ec3: Add cppcheck to base image setup
Branches
Unknown
Tags
Unknown