diff options
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/raw_cb.c | 3 | ||||
-rw-r--r-- | sys/net/raw_usrreq.c | 4 |
2 files changed, 6 insertions, 1 deletions
diff --git a/sys/net/raw_cb.c b/sys/net/raw_cb.c index eba5dc1..1e293af 100644 --- a/sys/net/raw_cb.c +++ b/sys/net/raw_cb.c @@ -32,7 +32,9 @@ #include <sys/param.h> #include <sys/domain.h> +#include <sys/lock.h> #include <sys/malloc.h> +#include <sys/mutex.h> #include <sys/protosw.h> #include <sys/socket.h> #include <sys/socketvar.h> @@ -93,6 +95,7 @@ raw_detach(rp) { struct socket *so = rp->rcb_socket; + SOCK_LOCK(so); so->so_pcb = 0; sotryfree(so); LIST_REMOVE(rp, list); diff --git a/sys/net/raw_usrreq.c b/sys/net/raw_usrreq.c index f3747c5..9507267 100644 --- a/sys/net/raw_usrreq.c +++ b/sys/net/raw_usrreq.c @@ -34,6 +34,7 @@ #include <sys/lock.h> #include <sys/malloc.h> #include <sys/mbuf.h> +#include <sys/mutex.h> #include <sys/protosw.h> #include <sys/signalvar.h> #include <sys/socket.h> @@ -139,8 +140,9 @@ raw_uabort(struct socket *so) if (rp == 0) return EINVAL; raw_disconnect(rp); + soisdisconnected(so); + SOCK_LOCK(so); sotryfree(so); - soisdisconnected(so); /* XXX huh? called after the sofree()? */ return 0; } |