Some SCSI devices get reset on incorrect commands, so retry up

to 5 device resets in media info and dumping.
This commit is contained in:
2017-11-26 22:20:31 +00:00
parent e01a060af9
commit e306dc4694
2 changed files with 21 additions and 0 deletions

View File

@@ -112,15 +112,25 @@ namespace DiscImageChef.Commands
MediaType dskType = MediaType.Unknown;
ulong blocks = 0;
uint blockSize = 0;
int resets = 0;
if(dev.IsRemovable)
{
deviceGotReset:
sense = dev.ScsiTestUnitReady(out senseBuf, dev.Timeout, out duration);
if(sense)
{
Decoders.SCSI.FixedSense? decSense = Decoders.SCSI.Sense.DecodeFixed(senseBuf);
if(decSense.HasValue)
{
// Just retry, for 5 times
if(decSense.Value.ASC == 0x29)
{
resets++;
if(resets < 5)
goto deviceGotReset;
}
if(decSense.Value.ASC == 0x3A)
{
int leftRetries = 5;