From 943bb929afd9720bb6b8583b8e1cb40ef2e777c3 Mon Sep 17 00:00:00 2001 From: Robert Watson Date: Mon, 12 Jul 2004 04:45:46 +0000 Subject: [PATCH] Introduce a global mtx 'ngsocketlist_mtx' to protect the global ng_socket list during insert/delete. --- sys/netgraph/ng_socket.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/sys/netgraph/ng_socket.c b/sys/netgraph/ng_socket.c index 9a140b631ffd..52308f412c2c 100644 --- a/sys/netgraph/ng_socket.c +++ b/sys/netgraph/ng_socket.c @@ -55,6 +55,7 @@ #include #include #include +#include #include #include #include @@ -154,6 +155,9 @@ SYSCTL_INT(_net_graph, OID_AUTO, recvspace, CTLFLAG_RW, /* List of all sockets */ static LIST_HEAD(, ngpcb) ngsocklist; +static struct mtx ngsocketlist_mtx; +MTX_SYSINIT(ngsocketlist, &ngsocketlist_mtx, "ng_socketlist", MTX_DEF); + #define sotongpcb(so) ((struct ngpcb *)(so)->so_pcb) /* If getting unexplained errors returned, set this to "kdb_enter("X"); */ @@ -525,7 +529,9 @@ ng_attach_common(struct socket *so, int type) pcbp->ng_socket = so; /* Add the socket to linked list */ + mtx_lock(&ngsocketlist_mtx); LIST_INSERT_HEAD(&ngsocklist, pcbp, socks); + mtx_unlock(&ngsocketlist_mtx); return (0); } @@ -558,7 +564,9 @@ ng_detach_common(struct ngpcb *pcbp, int which) } pcbp->ng_socket->so_pcb = NULL; pcbp->ng_socket = NULL; + mtx_lock(&ngsocketlist_mtx); LIST_REMOVE(pcbp, socks); + mtx_unlock(&ngsocketlist_mtx); FREE(pcbp, M_PCB); }