diff options
author | tanimura <tanimura@FreeBSD.org> | 2002-05-31 11:52:35 +0000 |
---|---|---|
committer | tanimura <tanimura@FreeBSD.org> | 2002-05-31 11:52:35 +0000 |
commit | e6fa9b9e922913444c2e6b2b58bf3de5eaed868d (patch) | |
tree | 9d5f24794525313566896ab89aa860515db344a6 /sys/netinet/ip_divert.c | |
parent | 1ea6cbb8c29088e04528460633798a6c131ca1ba (diff) | |
download | FreeBSD-src-e6fa9b9e922913444c2e6b2b58bf3de5eaed868d.zip FreeBSD-src-e6fa9b9e922913444c2e6b2b58bf3de5eaed868d.tar.gz |
Back out my lats commit of locking down a socket, it conflicts with hsu's work.
Requested by: hsu
Diffstat (limited to 'sys/netinet/ip_divert.c')
-rw-r--r-- | sys/netinet/ip_divert.c | 21 |
1 files changed, 3 insertions, 18 deletions
diff --git a/sys/netinet/ip_divert.c b/sys/netinet/ip_divert.c index e297390..8f56d2c 100644 --- a/sys/netinet/ip_divert.c +++ b/sys/netinet/ip_divert.c @@ -228,11 +228,8 @@ divert_packet(struct mbuf *m, int incoming, int port) if (sbappendaddr(&sa->so_rcv, (struct sockaddr *)&divsrc, m, (struct mbuf *)0) == 0) m_freem(m); - else { - SOCK_LOCK(sa); + else sorwakeup(sa); - SOCK_UNLOCK(sa); - } } else { m_freem(m); ipstat.ips_noproto++; @@ -258,7 +255,6 @@ div_output(so, m, addr, control) register struct ip *const ip = mtod(m, struct ip *); struct sockaddr_in *sin = (struct sockaddr_in *)addr; int error = 0; - int soopts; if (control) m_freem(control); /* XXX */ @@ -304,11 +300,8 @@ div_output(so, m, addr, control) /* Send packet to output processing */ ipstat.ips_rawout++; /* XXX */ - SOCK_LOCK(so); - soopts = so->so_options & SO_DONTROUTE; - SOCK_UNLOCK(so); error = ip_output(m, inp->inp_options, &inp->inp_route, - soopts | + (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST | IP_RAWOUTPUT, inp->inp_moptions); } else { @@ -372,9 +365,7 @@ div_attach(struct socket *so, int proto, struct thread *td) inp->inp_flags |= INP_HDRINCL; /* The socket is always "connected" because we always know "where" to send the packet */ - SOCK_LOCK(so); so->so_state |= SS_ISCONNECTED; - SOCK_UNLOCK(so); return 0; } @@ -393,21 +384,15 @@ div_detach(struct socket *so) static int div_abort(struct socket *so) { - SOCK_LOCK(so); soisdisconnected(so); - SOCK_UNLOCK(so); return div_detach(so); } static int div_disconnect(struct socket *so) { - SOCK_LOCK(so); - if ((so->so_state & SS_ISCONNECTED) == 0) { - SOCK_UNLOCK(so); + if ((so->so_state & SS_ISCONNECTED) == 0) return ENOTCONN; - } - SOCK_UNLOCK(so); return div_abort(so); } |