From 346ae16260abc51ed2978d100d039b6630b34d83 Mon Sep 17 00:00:00 2001 From: Alan McGovern Date: Sun, 25 Apr 2010 22:09:11 +0000 Subject: [PATCH] Only hash the buffer if the read was successful. Should improve performance slightly for cases where the data does not exist. svn path=/trunk/bitsharp/; revision=156065 --- .../MonoTorrent.Client/Managers/DiskManager.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs b/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs index e90a8e0e9..926499af6 100644 --- a/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs +++ b/src/MonoTorrent/MonoTorrent.Client/Managers/DiskManager.cs @@ -346,13 +346,18 @@ internal void BeginGetHash(TorrentManager manager, int pieceIndex, MainLoopResul DiskIOCallback readCallback = null; readCallback = delegate(bool successful) { - hasher.TransformBlock(hashBuffer, 0, count, hashBuffer, 0); + if (successful) + hasher.TransformBlock(hashBuffer, 0, count, hashBuffer, 0); offset += count; if (!successful || offset == endOffset) { - hasher.TransformFinalBlock(hashBuffer, 0, 0); - object hash = successful ? hasher.Hash : null; + object hash = null; + if (successful) + { + hasher.TransformFinalBlock(hashBuffer, 0, 0); + hash = hasher.Hash; + } ((IDisposable)hasher).Dispose(); ClientEngine.BufferManager.FreeBuffer(ref hashBuffer); ClientEngine.MainLoop.Queue(delegate {