tcp: force deschedule if no send space available
[vpp.git] / src / vnet / tcp / tcp.c
index 4a0ffc1..dfcce77 100644 (file)
@@ -1281,14 +1281,7 @@ tcp_session_send_params (transport_connection_t * trans_conn,
   /* This still works if fast retransmit is on */
   sp->tx_offset = tc->snd_nxt - tc->snd_una;
 
-  sp->flags = 0;
-  if (!tc->snd_wnd)
-    {
-      if (tcp_timer_is_active (tc, TCP_TIMER_PERSIST))
-       sp->flags = TRANSPORT_SND_F_DESCHED;
-      else
-       sp->flags = TRANSPORT_SND_F_POSTPONE;
-    }
+  sp->flags = sp->snd_space ? 0 : TRANSPORT_SND_F_DESCHED;
 
   return 0;
 }
@@ -1540,6 +1533,13 @@ tcp_connection_tx_pacer_reset (tcp_connection_t * tc, u32 window,
                                       srtt * CLIB_US_TIME_FREQ);
 }
 
+void
+tcp_reschedule (tcp_connection_t * tc)
+{
+  if (tcp_in_cong_recovery (tc) || tcp_snd_space_inline (tc))
+    transport_connection_reschedule (&tc->connection);
+}
+
 static void
 tcp_expired_timers_dispatch (u32 * expired_timers)
 {