diff --git a/lib/src/lightclient.rs b/lib/src/lightclient.rs index 521564b..644c0c5 100644 --- a/lib/src/lightclient.rs +++ b/lib/src/lightclient.rs @@ -592,20 +592,27 @@ impl LightClient { } } - let mut file_buffer = BufWriter::with_capacity( - 1_000_000, // 1 MB write buffer - File::create(self.config.get_wallet_path()).unwrap()); - - let r = match self.wallet.write().unwrap().write(&mut file_buffer) { - Ok(_) => Ok(()), - Err(e) => { - let err = format!("ERR: {}", e); - error!("{}", err); - Err(e.to_string()) - } - }; + let r; + { + // Prevent any overlapping syncs during save, and don't save in the middle of a sync + let _lock = self.sync_lock.lock().unwrap(); + + let wallet = self.wallet.write().unwrap(); + let mut file_buffer = BufWriter::with_capacity( + 1_000_000, // 1 MB write buffer + File::create(self.config.get_wallet_path()).unwrap()); - file_buffer.flush().map_err(|e| format!("{}", e))?; + r = match wallet.write(&mut file_buffer) { + Ok(_) => Ok(()), + Err(e) => { + let err = format!("ERR: {}", e); + error!("{}", err); + Err(e.to_string()) + } + }; + + file_buffer.flush().map_err(|e| format!("{}", e))?; + } r }