mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Changed backoff strategy for short reads.
Back off was exponential starting at 10ms, which for high baud rate and no flow-control connections might cause buffer overrun. This was causing problems when reading Cochran DCs, the hearbeat byte was being missed. Signed-off-by: John Van Ostrand <john@vanostrand.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
024b61ca04
commit
928621357c
1 changed files with 0 additions and 7 deletions
|
@ -395,19 +395,12 @@ static dc_status_t serial_ftdi_read (dc_custom_io_t *io, void *data, size_t size
|
|||
ERROR (device->context, "%s", ftdi_get_error_string(device->ftdi_ctx));
|
||||
return DC_STATUS_IO; //Error during read call.
|
||||
} else if (n == 0) {
|
||||
// Exponential backoff.
|
||||
if (slept >= timeout) {
|
||||
ERROR(device->context, "%s", "FTDI read timed out.");
|
||||
return DC_STATUS_TIMEOUT;
|
||||
}
|
||||
serial_ftdi_sleep (device, backoff);
|
||||
slept += backoff;
|
||||
backoff *= 2;
|
||||
if (backoff + slept > timeout)
|
||||
backoff = timeout - slept;
|
||||
} else {
|
||||
// Reset backoff to 1 on success.
|
||||
backoff = 1;
|
||||
}
|
||||
|
||||
nbytes += n;
|
||||
|
|
Loading…
Add table
Reference in a new issue