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