aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/vnet/tcp/tcp.c2
-rw-r--r--src/vnet/tcp/tcp_timer.h3
-rw-r--r--src/vnet/tcp/tcp_types.h2
3 files changed, 4 insertions, 3 deletions
diff --git a/src/vnet/tcp/tcp.c b/src/vnet/tcp/tcp.c
index 5ebb63802d7..d4da601f655 100644
--- a/src/vnet/tcp/tcp.c
+++ b/src/vnet/tcp/tcp.c
@@ -1101,7 +1101,7 @@ tcp_dispatch_pending_timers (tcp_worker_ctx_t * wrk)
continue;
/* Skip if the timer is not pending. Probably it was reset while
- * wating for dispatch */
+ * waiting for dispatch */
if (PREDICT_FALSE (!(tc->pending_timers & (1 << timer_id))))
continue;
diff --git a/src/vnet/tcp/tcp_timer.h b/src/vnet/tcp/tcp_timer.h
index f604152cdf9..06322a27d7e 100644
--- a/src/vnet/tcp/tcp_timer.h
+++ b/src/vnet/tcp/tcp_timer.h
@@ -117,7 +117,8 @@ tcp_retransmit_timer_update (tcp_timer_wheel_t * tw, tcp_connection_t * tc)
always_inline u8
tcp_timer_is_active (tcp_connection_t * tc, tcp_timers_e timer)
{
- return tc->timers[timer] != TCP_TIMER_HANDLE_INVALID;
+ return tc->timers[timer] != TCP_TIMER_HANDLE_INVALID
+ || (tc->pending_timers & (1 << timer));
}
always_inline void
diff --git a/src/vnet/tcp/tcp_types.h b/src/vnet/tcp/tcp_types.h
index 95d5b73a91d..0ffc036dc39 100644
--- a/src/vnet/tcp/tcp_types.h
+++ b/src/vnet/tcp/tcp_types.h
@@ -75,7 +75,7 @@ typedef enum _tcp_timers
foreach_tcp_timer
#undef _
TCP_N_TIMERS
-} tcp_timers_e;
+} __clib_packed tcp_timers_e;
#define TCP_TIMER_HANDLE_INVALID ((u32) ~0)