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 <[EMAIL PROTECTED]> <[EMAIL PROTECTED]>

To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to