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