Add guards around updating memo, save wallet

This commit is contained in:
Aditya Kulkarni 2020-04-29 12:21:07 -07:00
parent 7bcc266e70
commit 703192f45b
2 changed files with 26 additions and 9 deletions

View File

@ -342,6 +342,9 @@ impl LightClient {
info!("Created new wallet with a new seed!"); info!("Created new wallet with a new seed!");
info!("Created LightClient to {}", &config.server); info!("Created LightClient to {}", &config.server);
// Save
l.do_save().map_err(|s| io::Error::new(ErrorKind::PermissionDenied, s))?;
Ok(l) Ok(l)
} }
@ -367,6 +370,9 @@ impl LightClient {
info!("Created new wallet!"); info!("Created new wallet!");
info!("Created LightClient to {}", &config.server); info!("Created LightClient to {}", &config.server);
// Save
l.do_save().map_err(|s| io::Error::new(ErrorKind::PermissionDenied, s))?;
Ok(l) Ok(l)
} }
@ -576,14 +582,18 @@ impl LightClient {
1_000_000, // 1 MB write buffer 1_000_000, // 1 MB write buffer
File::create(self.config.get_wallet_path()).unwrap()); File::create(self.config.get_wallet_path()).unwrap());
match self.wallet.write().unwrap().write(&mut file_buffer) { let r = match self.wallet.write().unwrap().write(&mut file_buffer) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
Err(e) => { Err(e) => {
let err = format!("ERR: {}", e); let err = format!("ERR: {}", e);
error!("{}", err); error!("{}", err);
Err(e.to_string()) Err(e.to_string())
} }
} };
file_buffer.flush().map_err(|e| format!("{}", e))?;
r
} }
pub fn get_server_uri(&self) -> http::Uri { pub fn get_server_uri(&self) -> http::Uri {

View File

@ -1062,14 +1062,21 @@ impl LightWallet {
}; };
{ {
info!("A sapling note was spent in {}", tx.txid()); info!("A sapling note was sent in {}, getting memo", tx.txid());
// Update the WalletTx
// Do it in a short scope because of the write lock. // Do it in a short scope because of the write lock.
let mut txs = self.txs.write().unwrap(); let mut txs = self.txs.write().unwrap();
txs.get_mut(&tx.txid()).unwrap()
.notes.iter_mut() // Update memo if we have this Tx.
.find(|nd| nd.note == note).unwrap() match txs.get_mut(&tx.txid())
.memo = Some(memo); .and_then(|t| {
t.notes.iter_mut().find(|nd| nd.note == note)
}) {
None => (),
Some(nd) => {
nd.memo = Some(memo)
}
}
} }
} }