[PATCH 1/3] Changed backoff strategy for short reads.

John Van Ostrand john at vanostrand.com
Tue Sep 5 14:07:55 PDT 2017


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 at vanostrand.com>
---
 core/serial_ftdi.c | 7 -------
 1 file changed, 7 deletions(-)

diff --git a/core/serial_ftdi.c b/core/serial_ftdi.c
index f8cba95..297d0fa 100644
--- a/core/serial_ftdi.c
+++ b/core/serial_ftdi.c
@@ -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;
-- 
2.4.11



More information about the subsurface mailing list