@@ -100,19 +100,16 @@ static struct tcp_backlog_entry {
100100 u32_t send_seq ;
101101 u32_t send_ack ;
102102 struct k_delayed_work ack_timer ;
103- bool cancelled ;
104103} tcp_backlog [CONFIG_NET_TCP_BACKLOG_SIZE ];
105104
106105static void backlog_ack_timeout (struct k_work * work )
107106{
108107 struct tcp_backlog_entry * backlog =
109108 CONTAINER_OF (work , struct tcp_backlog_entry , ack_timer );
110109
111- if (!backlog -> cancelled ) {
112- NET_DBG ("Did not receive ACK in %dms" , ACK_TIMEOUT );
110+ NET_DBG ("Did not receive ACK in %dms" , ACK_TIMEOUT );
113111
114- send_reset (backlog -> tcp -> context , & backlog -> remote );
115- }
112+ send_reset (backlog -> tcp -> context , & backlog -> remote );
116113
117114 memset (backlog , 0 , sizeof (struct tcp_backlog_entry ));
118115}
@@ -265,17 +262,8 @@ static int tcp_backlog_ack(struct net_pkt *pkt, struct net_context *context)
265262 context -> tcp -> send_seq = tcp_backlog [r ].send_seq ;
266263 context -> tcp -> send_ack = tcp_backlog [r ].send_ack ;
267264
268- if (k_delayed_work_cancel (& tcp_backlog [r ].ack_timer ) < 0 ) {
269- /* Too late to cancel - just set flag for worker.
270- * TODO: Note that in this case, we can be preempted
271- * anytime (could have been preempted even before we did
272- * the check), so access to tcp_backlog should be synchronized
273- * between this function and worker.
274- */
275- tcp_backlog [r ].cancelled = true;
276- } else {
277- memset (& tcp_backlog [r ], 0 , sizeof (struct tcp_backlog_entry ));
278- }
265+ k_delayed_work_cancel (& tcp_backlog [r ].ack_timer );
266+ memset (& tcp_backlog [r ], 0 , sizeof (struct tcp_backlog_entry ));
279267
280268 return 0 ;
281269}
@@ -300,17 +288,8 @@ static int tcp_backlog_rst(struct net_pkt *pkt)
300288 return - EINVAL ;
301289 }
302290
303- if (k_delayed_work_cancel (& tcp_backlog [r ].ack_timer ) < 0 ) {
304- /* Too late to cancel - just set flag for worker.
305- * TODO: Note that in this case, we can be preempted
306- * anytime (could have been preempted even before we did
307- * the check), so access to tcp_backlog should be synchronized
308- * between this function and worker.
309- */
310- tcp_backlog [r ].cancelled = true;
311- } else {
312- memset (& tcp_backlog [r ], 0 , sizeof (struct tcp_backlog_entry ));
313- }
291+ k_delayed_work_cancel (& tcp_backlog [r ].ack_timer );
292+ memset (& tcp_backlog [r ], 0 , sizeof (struct tcp_backlog_entry ));
314293
315294 return 0 ;
316295}
@@ -320,22 +299,16 @@ static void handle_fin_timeout(struct k_work *work)
320299 struct net_tcp * tcp =
321300 CONTAINER_OF (work , struct net_tcp , fin_timer );
322301
323- if (!tcp -> fin_timer_cancelled ) {
324- NET_DBG ("Did not receive FIN in %dms" , FIN_TIMEOUT );
302+ NET_DBG ("Did not receive FIN in %dms" , FIN_TIMEOUT );
325303
326- net_context_unref (tcp -> context );
327- }
304+ net_context_unref (tcp -> context );
328305}
329306
330307static void handle_ack_timeout (struct k_work * work )
331308{
332309 /* This means that we did not receive ACK response in time. */
333310 struct net_tcp * tcp = CONTAINER_OF (work , struct net_tcp , ack_timer );
334311
335- if (tcp -> ack_timer_cancelled ) {
336- return ;
337- }
338-
339312 NET_DBG ("Did not receive ACK in %dms while in %s" , ACK_TIMEOUT ,
340313 net_tcp_state_str (net_tcp_get_state (tcp )));
341314
@@ -641,13 +614,8 @@ int net_context_unref(struct net_context *context)
641614 continue ;
642615 }
643616
644- if (k_delayed_work_cancel (& tcp_backlog [i ].ack_timer ) ==
645- - EINPROGRESS ) {
646- tcp_backlog [i ].cancelled = true;
647- } else {
648- memset (& tcp_backlog [i ], 0 ,
649- sizeof (struct tcp_backlog_entry ));
650- }
617+ k_delayed_work_cancel (& tcp_backlog [i ].ack_timer );
618+ memset (& tcp_backlog [i ], 0 , sizeof (tcp_backlog [i ]));
651619 }
652620
653621 net_tcp_release (context -> tcp );
@@ -701,7 +669,6 @@ int net_context_put(struct net_context *context)
701669 "disposing yet (waiting %dms)" , FIN_TIMEOUT );
702670 k_delayed_work_submit (& context -> tcp -> fin_timer ,
703671 FIN_TIMEOUT );
704- context -> tcp -> fin_timer_cancelled = false;
705672 queue_fin (context );
706673 return 0 ;
707674 }
@@ -1247,7 +1214,6 @@ NET_CONN_CB(tcp_established)
12471214 * would be stuck forever.
12481215 */
12491216 k_delayed_work_submit (& context -> tcp -> ack_timer , ACK_TIMEOUT );
1250- context -> tcp -> ack_timer_cancelled = false;
12511217 }
12521218
12531219 send_ack (context , & conn -> remote_addr , false);
0 commit comments