From 19914db94f065d6db7c7a2302cf570e0393e5c9f Mon Sep 17 00:00:00 2001 From: Natalia Portillo Date: Fri, 22 Dec 2017 22:02:10 +0000 Subject: [PATCH] Check speed doesn't become infinite because command duration was too low. --- DiscImageChef.Core/Devices/Dumping/ATA.cs | 11 ++++++----- DiscImageChef.Core/Devices/Dumping/CompactDisc.cs | 9 ++++++--- DiscImageChef.Core/Devices/Dumping/SBC.cs | 6 ++++-- DiscImageChef.Core/Devices/Dumping/SSC.cs | 5 ++++- DiscImageChef.Core/Devices/Dumping/SecureDigital.cs | 7 ++++--- DiscImageChef.Core/Devices/Dumping/XGD.cs | 9 ++++++--- DiscImageChef.Core/Devices/Scanning/ATA.cs | 8 ++++---- DiscImageChef.Core/Devices/Scanning/SCSI.cs | 7 ++++--- DiscImageChef.Core/Devices/Scanning/SecureDigital.cs | 4 ++-- 9 files changed, 40 insertions(+), 26 deletions(-) diff --git a/DiscImageChef.Core/Devices/Dumping/ATA.cs b/DiscImageChef.Core/Devices/Dumping/ATA.cs index c0e612538..42b1a7c65 100644 --- a/DiscImageChef.Core/Devices/Dumping/ATA.cs +++ b/DiscImageChef.Core/Devices/Dumping/ATA.cs @@ -277,8 +277,8 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Error reading {0} blocks from block {1}.", blocksToRead, i); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); - GC.Collect(); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; resume.NextBlock = i + blocksToRead; } @@ -394,8 +394,8 @@ namespace DiscImageChef.Core.Devices.Dumping dumpFile.Write(new byte[blockSize]); } - currentSpeed = blockSize / (double)1048576 / (duration / 1000); - GC.Collect(); + double newSpeed = blockSize / (double)1048576 / (duration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; currentBlock++; } @@ -439,7 +439,8 @@ namespace DiscImageChef.Core.Devices.Dumping double chkDuration = (chkEnd - chkStart).TotalMilliseconds; totalChkDuration += chkDuration; - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } DicConsole.WriteLine(); diff --git a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs index edf71680e..029def28d 100644 --- a/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs +++ b/DiscImageChef.Core/Devices/Dumping/CompactDisc.cs @@ -428,7 +428,8 @@ namespace DiscImageChef.Core.Devices.Dumping } } - currentSpeed = blockSize / (double)1048576 / (cmdDuration / 1000); + double newSpeed = blockSize / (double)1048576 / (cmdDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } dumpFile.Close(); @@ -616,7 +617,8 @@ namespace DiscImageChef.Core.Devices.Dumping } } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; resume.NextBlock = i + blocksToRead; } @@ -828,7 +830,8 @@ namespace DiscImageChef.Core.Devices.Dumping double chkDuration = (chkEnd - chkStart).TotalMilliseconds; totalChkDuration += chkDuration; - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } tracks[t].Checksums = trkChk.End().ToArray(); diff --git a/DiscImageChef.Core/Devices/Dumping/SBC.cs b/DiscImageChef.Core/Devices/Dumping/SBC.cs index ff282ea3d..702afb4c8 100644 --- a/DiscImageChef.Core/Devices/Dumping/SBC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SBC.cs @@ -385,7 +385,8 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Error reading {0} blocks from block {1}.", blocksToRead, i); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + double newSpeed= (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; resume.NextBlock = i + blocksToRead; } @@ -564,7 +565,8 @@ namespace DiscImageChef.Core.Devices.Dumping double chkDuration = (chkEnd - chkStart).TotalMilliseconds; totalChkDuration += chkDuration; - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } DicConsole.WriteLine(); diff --git a/DiscImageChef.Core/Devices/Dumping/SSC.cs b/DiscImageChef.Core/Devices/Dumping/SSC.cs index a029acecb..baad6ed7e 100644 --- a/DiscImageChef.Core/Devices/Dumping/SSC.cs +++ b/DiscImageChef.Core/Devices/Dumping/SSC.cs @@ -604,7 +604,10 @@ namespace DiscImageChef.Core.Devices.Dumping totalChkDuration += chkDuration; if(currentBlock % 10 == 0) - currentSpeed = blockSize / (double)1048576 / (duration / 1000); + { + double newSpeed = blockSize / (double)1048576 / (duration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; + } currentBlock++; currentSize += blockSize; currentFileSize += blockSize; diff --git a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs index 889cef5e1..417496dab 100644 --- a/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Dumping/SecureDigital.cs @@ -330,8 +330,8 @@ namespace DiscImageChef.Core.Devices.Dumping dumpLog.WriteLine("Error reading {0} blocks from block {1}.", blocksToRead, i); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); - GC.Collect(); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; resume.NextBlock = i + blocksToRead; } @@ -422,7 +422,8 @@ namespace DiscImageChef.Core.Devices.Dumping double chkDuration = (chkEnd - chkStart).TotalMilliseconds; totalChkDuration += chkDuration; - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (chkDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } DicConsole.WriteLine(); diff --git a/DiscImageChef.Core/Devices/Dumping/XGD.cs b/DiscImageChef.Core/Devices/Dumping/XGD.cs index 2194b7d64..8b169a084 100644 --- a/DiscImageChef.Core/Devices/Dumping/XGD.cs +++ b/DiscImageChef.Core/Devices/Dumping/XGD.cs @@ -430,7 +430,8 @@ namespace DiscImageChef.Core.Devices.Dumping foreach(string senseLine in senseLines) dumpLog.WriteLine(senseLine); } - currentSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (cmdDuration / 1000); + double newSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (cmdDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; blocksToRead = saveBlocksToRead; currentSector = i + 1; resume.NextBlock = currentSector; @@ -558,7 +559,8 @@ namespace DiscImageChef.Core.Devices.Dumping foreach(string senseLine in senseLines) dumpLog.WriteLine(senseLine); } - currentSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (cmdDuration / 1000); + double newSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (cmdDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; currentSector += blocksToRead; resume.NextBlock = currentSector; } @@ -765,7 +767,8 @@ namespace DiscImageChef.Core.Devices.Dumping double chkDuration = (chkEnd - chkStart).TotalMilliseconds; totalChkDuration += chkDuration; - currentSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (chkDuration / 1000); + double newSpeed = (double)BLOCK_SIZE * blocksToRead / 1048576 / (chkDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } DicConsole.WriteLine(); diff --git a/DiscImageChef.Core/Devices/Scanning/ATA.cs b/DiscImageChef.Core/Devices/Scanning/ATA.cs index 8615708ae..7972765f8 100644 --- a/DiscImageChef.Core/Devices/Scanning/ATA.cs +++ b/DiscImageChef.Core/Devices/Scanning/ATA.cs @@ -157,8 +157,8 @@ namespace DiscImageChef.Core.Devices.Scanning ibgLog.Write(i, 0); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); - GC.Collect(); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } end = DateTime.UtcNow; @@ -237,8 +237,8 @@ namespace DiscImageChef.Core.Devices.Scanning ibgLog.Write(currentBlock, 0); } - currentSpeed = blockSize / (double)1048576 / (duration / 1000); - GC.Collect(); + double newSpeed = blockSize / (double)1048576 / (duration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; currentBlock++; } diff --git a/DiscImageChef.Core/Devices/Scanning/SCSI.cs b/DiscImageChef.Core/Devices/Scanning/SCSI.cs index 800ca0bff..4b9af8274 100644 --- a/DiscImageChef.Core/Devices/Scanning/SCSI.cs +++ b/DiscImageChef.Core/Devices/Scanning/SCSI.cs @@ -344,8 +344,8 @@ namespace DiscImageChef.Core.Devices.Scanning } } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); - GC.Collect(); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } end = DateTime.UtcNow; @@ -402,7 +402,8 @@ namespace DiscImageChef.Core.Devices.Scanning ibgLog.Write(i, 0); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (cmdDuration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } end = DateTime.UtcNow; diff --git a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs index a8637a570..2bad12e55 100644 --- a/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs +++ b/DiscImageChef.Core/Devices/Scanning/SecureDigital.cs @@ -188,8 +188,8 @@ namespace DiscImageChef.Core.Devices.Scanning ibgLog.Write(i, 0); } - currentSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); - GC.Collect(); + double newSpeed = (double)blockSize * blocksToRead / 1048576 / (duration / 1000); + if(!double.IsInfinity(newSpeed)) currentSpeed = newSpeed; } end = DateTime.UtcNow;