In tcp_input.c, function tcp_rcv_state_process(), when doing ack processing of state TCP_FIN_WAIT1, there are statements (kernel 2.4.21): if (!sk->dead) ...... else { ...... if (tmo > TCP_TIMEWAIT_LEN) { ...... --->> } else if (th->fin || sk->lock.users) { /* Bad case. We could lose such FIN otherwise. * It is not a big problem, but it looks confusing * and not so rare event. We still can lose it now, * if it spins in bh_lock_sock(), but it is really * marginal case. */ tcp_reset_keepalive_timer(sk, tmo); } else { ...... } but as far as I understand, 1)if sk is dead, there would be no process context reference to it. 2)if sk->lock.users==1, it means that some process context is referencing it, and most likely it is in backlog processing when doing release_sock(). 1) and 2) seems to be a bit conflict to me, Would you please tell me what is the important points that I have missed? Thank you for your kind help in advance. http://goto.sohu.com/goto.php3?code=libo-gz096mailzhujiao ??????????????? - : send the line "unsubscribe linux-net" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html