Merge pull request #6238
f717d593
wallet2: guard against race with multiple decrypt_keys users (moneromooo-monero)
This commit is contained in:
commit
da617ac1b0
@ -1186,6 +1186,7 @@ wallet2::wallet2(network_type nettype, uint64_t kdf_rounds, bool unattended):
|
||||
m_ringdb(),
|
||||
m_last_block_reward(0),
|
||||
m_encrypt_keys_after_refresh(boost::none),
|
||||
m_decrypt_keys_lockers(0),
|
||||
m_unattended(unattended),
|
||||
m_devices_registered(false),
|
||||
m_device_last_key_image_sync(0),
|
||||
@ -4371,12 +4372,18 @@ bool wallet2::verify_password(const std::string& keys_file_name, const epee::wip
|
||||
|
||||
void wallet2::encrypt_keys(const crypto::chacha_key &key)
|
||||
{
|
||||
boost::lock_guard<boost::mutex> lock(m_decrypt_keys_lock);
|
||||
if (--m_decrypt_keys_lockers) // another lock left ?
|
||||
return;
|
||||
m_account.encrypt_keys(key);
|
||||
m_account.decrypt_viewkey(key);
|
||||
}
|
||||
|
||||
void wallet2::decrypt_keys(const crypto::chacha_key &key)
|
||||
{
|
||||
boost::lock_guard<boost::mutex> lock(m_decrypt_keys_lock);
|
||||
if (m_decrypt_keys_lockers++) // already unlocked ?
|
||||
return;
|
||||
m_account.encrypt_viewkey(key);
|
||||
m_account.decrypt_keys(key);
|
||||
}
|
||||
|
@ -1618,6 +1618,8 @@ private:
|
||||
|
||||
crypto::chacha_key m_cache_key;
|
||||
boost::optional<epee::wipeable_string> m_encrypt_keys_after_refresh;
|
||||
boost::mutex m_decrypt_keys_lock;
|
||||
unsigned int m_decrypt_keys_lockers;
|
||||
|
||||
bool m_unattended;
|
||||
bool m_devices_registered;
|
||||
|
Loading…
Reference in New Issue
Block a user