Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 24 Apr 2002 20:08:56 +0900
From:      Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp>
To:        current@FreeBSD.org, smp@FreeBSD.org
Cc:        Seigo Tanimura <tanimura@nkth.carrots.uucp.r.dl.itc.u-tokyo.ac.jp>
Subject:   Locking down a socket, milestone 1
Message-ID:  <200204241110.g3OB8u8t006194@bunko>

next in thread | raw e-mail | index | archive | help
I am now working on locking down a socket.  (I have heard that Jeffrey
Hsu is also doing that, but I have never seen his patch.  Has anyone
seen that?) My first milestone patch is now available at:


http://people.FreeBSD.org/~tanimura/patches/socket_milestone1.diff.gz


The works I have done so far are:


- Determine the lock required to protect each of the members in struct
  socket.

- Add mutexes to each of the sockbufs in a socket as BSD/OS does.

- Lock down so_count, so_options, so_linger and so_state.

- Add a global mutex socq_lock to protect the connection queues of a
  listening socket.  Lock socq_lock to lock two sockets at once,
  followed by enqueuing or dequeuing a socket, or moving a socket across
  queues.  socq_lock is not an sx lock because we usually have to lock
  two sockets to modify them.

- Add a global sx sigio_lock to protect the pointer to the sigio
  object of a socket.  This is to avoid lock order reversal caused by
  locking a process in pgsigio().  This lock should be applicable to a
  pipe as well.


Although there are still lots of works to do, the patch has grown up
quite a lot.  so_options is the most notorious member in struct socket
so far because it is used in almost all of the protocol stacks.  I
would therefore like to test, fix and merge the patch before it blows
up.

Comments are welcome.

Thanks.

-- 
Seigo Tanimura <tanimura@r.dl.itc.u-tokyo.ac.jp> <tanimura@FreeBSD.org>

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-smp" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200204241110.g3OB8u8t006194>