[TCP]When are both sk->dead==1 and sk->lock.users==1 true?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux 802.1Q VLAN]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Git]     [Bugtraq]     [Yosemite News and Information]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux PCI]     [Linux Admin]     [Samba]

  Powered by Linux