FS#7879 - Anti-skip buffer doesn't work correctly on read errors
I use my iHP-120 harddisk player with rockbox while jogging regularly, but sometimes the track just stops and the player instantly skips to the next track, presumably due to a read error.
I have the anti-skip buffer set to 10 minutes already, but I doubt it has actually been trying to read for that long because it can switch to the next track so fast.
In the rockbox code, I found out that when the buffer runs out, audio_read_file in playback.c is called. For disk access it calls read() and if that fails it seems to skip to the next track (the log it does is "File ended %ldB early")
In ata.c I found that the read is performed by ata_read_sectors, which does indeed have some mechanism to retry on errors, but only for READ_TIMEOUT time, which is only 5 seconds. After that an error is returned, and from what I understand, no retry is attempted after that, even though there may still be 9 minutes and 55 seconds left in the buffer.
I think playback.c should know what was the cause of the read error to decide if it should try again or indeed skip to the next file.