double lock on socket

Mike Castle (mcastle@umr.edu)
Tue, 28 May 1996 20:06:47 -0500 (CDT)


Now, I know the double lock on socket message is supposed to not
mean anything anymore... matter of fact, the message appears to
be disabled in standard code....

But, a while back, I'd hacked linux/net/sock.h to make the
lock_sock() not just print a double lock occured, but where the
current and prev locks happened.

Not seen such a message in a while, but I finally did today with
1.99.7. I saw the following when I type into a VC that had an
rlogin session that had been idle for a while [formatted to fit
under 80 chars]

May 28 18:51:22 thune kernel: double lock on socket at tcp.c:1162, \
prev lock at tcp.c:1440

Now, in that file, line 1162 is in tcp_sendmsg() (just prior to
the discussion of Nagle's rule); line 1440 is in tcp_recvmsg()
(just prior to found_on_skb: label).

I must admit, I don't understand the networking code thoroughly.
However, it appears that there is no obvious path from that point
in tcp_recvmsg() to tcp_sendmsg() that does not go through
release_sock().

I'm still a bit confused on how a process accessing the network,
that has been paged out, could cause this scenario....

If that has been discussed before, a pointer to the message-id
(and a working website that has them archived... last time i
tried homer.ncm.com, it wasn't working), I'll reread the
discussion myself.

mrc

-- 
Mike Castle .-=NEXUS=-.  Life is like a clock:  You can work constantly
  mcastle@cs.umr.edu     and be right all the time, or not work at all
   mcastle@umr.edu       and be right at least twice a day.  -- mrc
    We are all of us living in the shadow of Manhattan.  -- Watchmen