This repository has been archived by the owner on May 24, 2022. It is now read-only.
crates/accounts: fix conflicting lock orders #665
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
unlocked_secrets
andunlocked
areparking_lot::RwLock
.In fn
sign()
,unlocked_secrets.read()
->password()
->unlocked.write()
.openethereum/crates/accounts/src/lib.rs
Lines 449 to 455 in 6a42062
openethereum/crates/accounts/src/lib.rs
Lines 372 to 373 in 6a42062
There are two other cases where
unlocked
is locked beforeunlocked_secrets
.If they are concurrent with the above case, a deadlock may happen.
openethereum/crates/accounts/src/lib.rs
Lines 420 to 422 in 6a42062
openethereum/crates/accounts/src/lib.rs
Lines 343 to 354 in 6a42062
The fix is to assign
unlocked_secrets.read()
to a variablesecrets
and explicitly drop it before callingpassword()
.