View | Details | Raw Unified | Return to bug 24645
Collapse All | Expand All

(-)sys/netinet/tcp_input.c (-14 / +30 lines)
Lines 177-186 Link Here
177
	if ((th)->th_seq == (tp)->rcv_nxt && \
177
	if ((th)->th_seq == (tp)->rcv_nxt && \
178
	    LIST_EMPTY(&(tp)->t_segq) && \
178
	    LIST_EMPTY(&(tp)->t_segq) && \
179
	    (tp)->t_state == TCPS_ESTABLISHED) { \
179
	    (tp)->t_state == TCPS_ESTABLISHED) { \
180
		if (tcp_delack_enabled) \
180
		if (tcp_delack_enabled) { \
181
			callout_reset(tp->tt_delack, tcp_delacktime, \
181
			if (callout_pending(tp->tt_delack)) { \
182
			    tcp_timer_delack, tp); \
182
				callout_stop(tp->tt_delack); \
183
		else \
183
				tp->t_flags |= TF_ACKNOW; \
184
			} else \
185
	                        callout_reset(tp->tt_delack, tcp_delacktime, \
186
				    tcp_timer_delack, tp); \
187
		} else \
184
			tp->t_flags |= TF_ACKNOW; \
188
			tp->t_flags |= TF_ACKNOW; \
185
		(tp)->rcv_nxt += *(tlenp); \
189
		(tp)->rcv_nxt += *(tlenp); \
186
		flags = (th)->th_flags & TH_FIN; \
190
		flags = (th)->th_flags & TH_FIN; \
Lines 962-969 Link Here
962
			sbappend(&so->so_rcv, m);
966
			sbappend(&so->so_rcv, m);
963
			sorwakeup(so);
967
			sorwakeup(so);
964
			if (tcp_delack_enabled) {
968
			if (tcp_delack_enabled) {
965
	                        callout_reset(tp->tt_delack, tcp_delacktime,
969
				if (callout_pending(tp->tt_delack)) {
966
	                            tcp_timer_delack, tp);
970
					callout_stop(tp->tt_delack);
971
					tp->t_flags |= TF_ACKNOW;
972
				} else 
973
		                        callout_reset(tp->tt_delack, tcp_delacktime,
974
					    tcp_timer_delack, tp);
967
			} else {
975
			} else {
968
				tp->t_flags |= TF_ACKNOW;
976
				tp->t_flags |= TF_ACKNOW;
969
				tcp_output(tp);
977
				tcp_output(tp);
Lines 1289-1298 Link Here
1289
			 * If there's data, delay ACK; if there's also a FIN
1297
			 * If there's data, delay ACK; if there's also a FIN
1290
			 * ACKNOW will be turned on later.
1298
			 * ACKNOW will be turned on later.
1291
			 */
1299
			 */
1292
			if (tcp_delack_enabled && tlen != 0)
1300
			if (tcp_delack_enabled && tlen != 0) {
1293
                                callout_reset(tp->tt_delack, tcp_delacktime,  
1301
				if (callout_pending(tp->tt_delack)) {
1294
                                    tcp_timer_delack, tp);  
1302
					callout_stop(tp->tt_delack);
1295
			else
1303
					tp->t_flags |= TF_ACKNOW;
1304
				} else 
1305
		                        callout_reset(tp->tt_delack, tcp_delacktime,
1306
					    tcp_timer_delack, tp);
1307
			} else
1296
				tp->t_flags |= TF_ACKNOW;
1308
				tp->t_flags |= TF_ACKNOW;
1297
			/*
1309
			/*
1298
			 * Received <SYN,ACK> in SYN_SENT[*] state.
1310
			 * Received <SYN,ACK> in SYN_SENT[*] state.
Lines 2117-2126 Link Here
2117
			 *  Otherwise, since we received a FIN then no
2129
			 *  Otherwise, since we received a FIN then no
2118
			 *  more input can be expected, send ACK now.
2130
			 *  more input can be expected, send ACK now.
2119
			 */
2131
			 */
2120
			if (tcp_delack_enabled && (tp->t_flags & TF_NEEDSYN))
2132
			if (tcp_delack_enabled && (tp->t_flags & TF_NEEDSYN)) {
2121
                                callout_reset(tp->tt_delack, tcp_delacktime,  
2133
				if (callout_pending(tp->tt_delack)) {
2122
                                    tcp_timer_delack, tp);  
2134
					callout_stop(tp->tt_delack);
2123
			else
2135
					tp->t_flags |= TF_ACKNOW;
2136
				} else 
2137
		                        callout_reset(tp->tt_delack, tcp_delacktime,
2138
					    tcp_timer_delack, tp);
2139
			} else
2124
				tp->t_flags |= TF_ACKNOW;
2140
				tp->t_flags |= TF_ACKNOW;
2125
			tp->rcv_nxt++;
2141
			tp->rcv_nxt++;
2126
		}
2142
		}

Return to bug 24645