]> git.meshlink.io Git - utcp/commitdiff
Fix bug in retransmit().
authorGuus Sliepen <guus@meshlink.io>
Mon, 19 Oct 2015 20:03:21 +0000 (22:03 +0200)
committerGuus Sliepen <guus@sliepen.org>
Sun, 2 Jul 2017 10:04:32 +0000 (12:04 +0200)
The logic to check whether we actually have something to retransmit was
wrong, causing retransmit() to bail out early without setting or resetting
the timer. This also caused utcp_timeout() to return a negative value.

utcp.c

diff --git a/utcp.c b/utcp.c
index 89a38b7d1c9546e94458531031b2ea419dad9cd6..7c577018888b0fd99b7cac6f9d66e29b9a0fd91c 100644 (file)
--- a/utcp.c
+++ b/utcp.c
@@ -547,8 +547,11 @@ static void swap_ports(struct hdr *hdr) {
 }
 
 static void retransmit(struct utcp_connection *c) {
-       if(c->state == CLOSED || c->snd.nxt == c->snd.una)
+       if(c->state == CLOSED || c->snd.last == c->snd.una) {
+               debug("Retransmit() called but nothing to retransmit!\n");
+               stop_retransmit_timer(c);
                return;
+       }
 
        struct utcp *utcp = c->utcp;