diff options
author | alfred <alfred@FreeBSD.org> | 2002-05-01 20:44:46 +0000 |
---|---|---|
committer | alfred <alfred@FreeBSD.org> | 2002-05-01 20:44:46 +0000 |
commit | 798c53d495a4eb1c10dc65a1d2ca87e2cb12f8df (patch) | |
tree | 47fe7acf6ad89bf88d96ff3e57b5a8e31207cbf6 /sys/net | |
parent | 97feabed08c26b8c53c3d7fd222d27f5c7433f82 (diff) | |
download | FreeBSD-src-798c53d495a4eb1c10dc65a1d2ca87e2cb12f8df.zip FreeBSD-src-798c53d495a4eb1c10dc65a1d2ca87e2cb12f8df.tar.gz |
Redo the sigio locking.
Turn the sigio sx into a mutex.
Sigio lock is really only needed to protect interrupts from dereferencing
the sigio pointer in an object when the sigio itself is being destroyed.
In order to do this in the most unintrusive manner change pgsigio's
sigio * argument into a **, that way we can lock internally to the
function.
Diffstat (limited to 'sys/net')
-rw-r--r-- | sys/net/bpf.c | 2 | ||||
-rw-r--r-- | sys/net/if_tap.c | 2 | ||||
-rw-r--r-- | sys/net/if_tun.c | 2 | ||||
-rw-r--r-- | sys/net/rtsock.c | 4 |
4 files changed, 3 insertions, 7 deletions
diff --git a/sys/net/bpf.c b/sys/net/bpf.c index 0077e51..325af54 100644 --- a/sys/net/bpf.c +++ b/sys/net/bpf.c @@ -511,7 +511,7 @@ bpf_wakeup(d) } wakeup((caddr_t)d); if (d->bd_async && d->bd_sig && d->bd_sigio) - pgsigio(d->bd_sigio, d->bd_sig, 0); + pgsigio(&d->bd_sigio, d->bd_sig, 0); selwakeup(&d->bd_sel); } diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c index ad2ba05..45ce21f 100644 --- a/sys/net/if_tap.c +++ b/sys/net/if_tap.c @@ -626,7 +626,7 @@ tapifstart(ifp) } if ((tp->tap_flags & TAP_ASYNC) && (tp->tap_sigio != NULL)) - pgsigio(tp->tap_sigio, SIGIO, 0); + pgsigio(&tp->tap_sigio, SIGIO, 0); selwakeup(&tp->tap_rsel); ifp->if_opackets ++; /* obytes are counted in ether_output */ diff --git a/sys/net/if_tun.c b/sys/net/if_tun.c index b6c7668..a6c89fb 100644 --- a/sys/net/if_tun.c +++ b/sys/net/if_tun.c @@ -223,7 +223,7 @@ tunstart(struct ifnet *ifp) wakeup((caddr_t)tp); } if (tp->tun_flags & TUN_ASYNC && tp->tun_sigio) - pgsigio(tp->tun_sigio, SIGIO, 0); + pgsigio(&tp->tun_sigio, SIGIO, 0); selwakeup(&tp->tun_rsel); } diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 11481fe..47031c2 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -39,7 +39,6 @@ #include <sys/domain.h> #include <sys/kernel.h> #include <sys/jail.h> -#include <sys/lock.h> #include <sys/malloc.h> #include <sys/mbuf.h> #include <sys/proc.h> @@ -47,7 +46,6 @@ #include <sys/signalvar.h> #include <sys/socket.h> #include <sys/socketvar.h> -#include <sys/sx.h> #include <sys/sysctl.h> #include <sys/systm.h> @@ -149,10 +147,8 @@ rts_attach(struct socket *so, int proto, struct thread *td) } rp->rcb_faddr = &route_src; route_cb.any_count++; - SIGIO_SLOCK(); soisconnected_locked(so); so->so_options |= SO_USELOOPBACK; - SIGIO_SUNLOCK(); splx(s); return 0; } |