From acebe8e3d264d6f5ec28574ef98690ddc66c7dbd Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Tue, 13 May 2014 12:57:02 +0200 Subject: [PATCH] Tighten scope of the FileInputStream in WalletAppKit to avoid lock collisions on Windows. Resolves issue 556. --- .../com/google/bitcoin/kits/WalletAppKit.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/com/google/bitcoin/kits/WalletAppKit.java b/core/src/main/java/com/google/bitcoin/kits/WalletAppKit.java index e877af24..6322ac37 100644 --- a/core/src/main/java/com/google/bitcoin/kits/WalletAppKit.java +++ b/core/src/main/java/com/google/bitcoin/kits/WalletAppKit.java @@ -189,7 +189,6 @@ public class WalletAppKit extends AbstractIdleService { throw new IOException("Could not create named directory."); } } - FileInputStream walletStream = null; try { File chainFile = new File(directory, filePrefix + ".spvchain"); boolean chainFileExists = chainFile.exists(); @@ -216,12 +215,16 @@ public class WalletAppKit extends AbstractIdleService { if (this.userAgent != null) vPeerGroup.setUserAgent(userAgent, version); if (vWalletFile.exists()) { - walletStream = new FileInputStream(vWalletFile); - vWallet = new Wallet(params); - addWalletExtensions(); // All extensions must be present before we deserialize - new WalletProtobufSerializer().readWallet(WalletProtobufSerializer.parseToProto(walletStream), vWallet); - if (shouldReplayWallet) - vWallet.clearTransactions(0); + FileInputStream walletStream = new FileInputStream(vWalletFile); + try { + vWallet = new Wallet(params); + addWalletExtensions(); // All extensions must be present before we deserialize + new WalletProtobufSerializer().readWallet(WalletProtobufSerializer.parseToProto(walletStream), vWallet); + if (shouldReplayWallet) + vWallet.clearTransactions(0); + } finally { + walletStream.close(); + } } else { vWallet = new Wallet(params); vWallet.addKey(new ECKey()); @@ -270,8 +273,6 @@ public class WalletAppKit extends AbstractIdleService { } } catch (BlockStoreException e) { throw new IOException(e); - } finally { - if (walletStream != null) walletStream.close(); } }