summaryrefslogtreecommitdiffstats
path: root/sys/netgraph
diff options
context:
space:
mode:
authortanimura <tanimura@FreeBSD.org>2002-05-31 11:52:35 +0000
committertanimura <tanimura@FreeBSD.org>2002-05-31 11:52:35 +0000
commite6fa9b9e922913444c2e6b2b58bf3de5eaed868d (patch)
tree9d5f24794525313566896ab89aa860515db344a6 /sys/netgraph
parent1ea6cbb8c29088e04528460633798a6c131ca1ba (diff)
downloadFreeBSD-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/netgraph')
-rw-r--r--sys/netgraph/ng_ksocket.c60
-rw-r--r--sys/netgraph/ng_socket.c16
2 files changed, 11 insertions, 65 deletions
diff --git a/sys/netgraph/ng_ksocket.c b/sys/netgraph/ng_ksocket.c
index 0badc93..ba60213 100644
--- a/sys/netgraph/ng_ksocket.c
+++ b/sys/netgraph/ng_ksocket.c
@@ -507,17 +507,7 @@ static struct ng_type ng_ksocket_typestruct = {
};
NETGRAPH_INIT(ksocket, &ng_ksocket_typestruct);
-#define ERROUT(x) \
- do { \
- error = (x); \
- goto done; \
- } while (0)
-#define ERROUT_SOCK(x) \
- do { \
- error = (x); \
- SOCK_UNLOCK(so); \
- goto done; \
- } while (0)
+#define ERROUT(x) do { error = (x); goto done; } while (0)
/************************************************************************
NETGRAPH NODE STUFF
@@ -623,9 +613,7 @@ ng_ksocket_connect(hook_p hook)
priv->so->so_upcall = ng_ksocket_incoming;
priv->so->so_rcv.sb_flags |= SB_UPCALL;
priv->so->so_snd.sb_flags |= SB_UPCALL;
- SOCK_LOCK(priv->so);
priv->so->so_state |= SS_NBIO;
- SOCK_UNLOCK(priv->so);
/*
* --Original comment--
* On a cloned socket we may have already received one or more
@@ -720,10 +708,8 @@ ng_ksocket_rcvmsg(node_p node, item_p item, hook_p lasthook)
ERROUT(ENXIO);
/* Make sure the socket is capable of accepting */
- SOCK_LOCK(so);
if (!(so->so_options & SO_ACCEPTCONN))
- ERROUT_SOCK(EINVAL);
- SOCK_UNLOCK(so);
+ ERROUT(EINVAL);
if (priv->flags & KSF_ACCEPTING)
ERROUT(EALREADY);
@@ -758,24 +744,18 @@ ng_ksocket_rcvmsg(node_p node, item_p item, hook_p lasthook)
ERROUT(ENXIO);
/* Do connect */
- SOCK_LOCK(so);
if ((so->so_state & SS_ISCONNECTING) != 0)
- ERROUT_SOCK(EALREADY);
- SOCK_UNLOCK(so);
+ ERROUT(EALREADY);
if ((error = soconnect(so, sa, td)) != 0) {
- SOCK_LOCK(so);
so->so_state &= ~SS_ISCONNECTING;
- ERROUT_SOCK(error);
+ ERROUT(error);
}
- SOCK_LOCK(so);
- if ((so->so_state & SS_ISCONNECTING) != 0) {
+ if ((so->so_state & SS_ISCONNECTING) != 0)
/* We will notify the sender when we connect */
priv->response_token = msg->header.token;
raddr = priv->response_addr;
priv->flags |= KSF_CONNECTING;
- ERROUT_SOCK(EINPROGRESS);
- }
- SOCK_UNLOCK(so);
+ ERROUT(EINPROGRESS);
break;
}
@@ -794,11 +774,9 @@ ng_ksocket_rcvmsg(node_p node, item_p item, hook_p lasthook)
/* Get function */
if (msg->header.cmd == NGM_KSOCKET_GETPEERNAME) {
- SOCK_LOCK(so);
if ((so->so_state
& (SS_ISCONNECTED|SS_ISCONFIRMING)) == 0)
- ERROUT_SOCK(ENOTCONN);
- SOCK_UNLOCK(so);
+ ERROUT(ENOTCONN);
func = so->so_proto->pr_usrreqs->pru_peeraddr;
} else
func = so->so_proto->pr_usrreqs->pru_sockaddr;
@@ -1068,13 +1046,11 @@ ng_ksocket_incoming2(node_p node, hook_p hook, void *arg1, int waitflag)
/* Check whether a pending connect operation has completed */
if (priv->flags & KSF_CONNECTING) {
- SOCK_LOCK(so);
if ((error = so->so_error) != 0) {
so->so_error = 0;
so->so_state &= ~SS_ISCONNECTING;
}
if (!(so->so_state & SS_ISCONNECTING)) {
- SOCK_UNLOCK(so);
NG_MKMESSAGE(response, NGM_KSOCKET_COOKIE,
NGM_KSOCKET_CONNECT, sizeof(int32_t), waitflag);
if (response != NULL) {
@@ -1090,8 +1066,7 @@ ng_ksocket_incoming2(node_p node, hook_p hook, void *arg1, int waitflag)
priv->response_addr, NULL);
}
priv->flags &= ~KSF_CONNECTING;
- } else
- SOCK_UNLOCK(so);
+ }
}
/* Check whether a pending accept operation has completed */
@@ -1121,14 +1096,10 @@ ng_ksocket_incoming2(node_p node, hook_p hook, void *arg1, int waitflag)
struct sockaddr *sa = NULL;
meta_p meta = NULL;
struct mbuf *n;
- int sostate;
/* Try to get next packet from socket */
- SOCK_LOCK(so);
- sostate = so->so_state & SS_ISCONNECTED;
- SOCK_UNLOCK(so);
if ((error = (*so->so_proto->pr_usrreqs->pru_soreceive)
- (so, sostate ? NULL : &sa,
+ (so, (so->so_state & SS_ISCONNECTED) ? NULL : &sa,
&auio, &m, (struct mbuf **)0, &flags)) != 0)
break;
@@ -1175,17 +1146,14 @@ sendit: /* Forward data with optional peer sockaddr as meta info */
* If the peer has closed the connection, forward a 0-length mbuf
* to indicate end-of-file.
*/
- SOCK_LOCK(so);
if (so->so_state & SS_CANTRCVMORE && !(priv->flags & KSF_EOFSEEN)) {
- SOCK_UNLOCK(so);
MGETHDR(m, waitflag, MT_DATA);
if (m != NULL) {
m->m_len = m->m_pkthdr.len = 0;
NG_SEND_DATA_ONLY(error, priv->hook, m);
}
priv->flags |= KSF_EOFSEEN;
- } else
- SOCK_UNLOCK(so);
+ }
splx(s);
}
@@ -1204,12 +1172,8 @@ ng_ksocket_check_accept(priv_p priv)
return error;
}
if (TAILQ_EMPTY(&head->so_comp)) {
- SOCK_LOCK(head);
- if (head->so_state & SS_CANTRCVMORE) {
- SOCK_UNLOCK(head);
+ if (head->so_state & SS_CANTRCVMORE)
return ECONNABORTED;
- }
- SOCK_UNLOCK(head);
return EWOULDBLOCK;
}
return 0;
@@ -1240,10 +1204,8 @@ ng_ksocket_finish_accept(priv_p priv)
/* XXX KNOTE(&head->so_rcv.sb_sel.si_note, 0); */
- SOCK_LOCK(so);
so->so_state &= ~SS_COMP;
so->so_state |= SS_NBIO;
- SOCK_UNLOCK(so);
so->so_head = NULL;
soaccept(so, &sa);
diff --git a/sys/netgraph/ng_socket.c b/sys/netgraph/ng_socket.c
index 312b36b..09d1c46 100644
--- a/sys/netgraph/ng_socket.c
+++ b/sys/netgraph/ng_socket.c
@@ -734,9 +734,7 @@ ship_msg(struct ngpcb *pcbp, struct ng_mesg *msg, struct sockaddr_ng *addr)
m_freem(mdata);
return (ENOBUFS);
}
- SOCK_LOCK(so);
sorwakeup(so);
- SOCK_UNLOCK(so);
return (0);
}
@@ -772,13 +770,9 @@ ngs_connect(hook_p hook)
if ((priv->datasock)
&& (priv->datasock->ng_socket)) {
if (NG_NODE_NUMHOOKS(node) == 1) {
- SOCK_LOCK(priv->datasock->ng_socket);
priv->datasock->ng_socket->so_state |= SS_ISCONNECTED;
- SOCK_UNLOCK(priv->datasock->ng_socket);
} else {
- SOCK_LOCK(priv->datasock->ng_socket);
priv->datasock->ng_socket->so_state &= ~SS_ISCONNECTED;
- SOCK_UNLOCK(priv->datasock->ng_socket);
}
}
return (0);
@@ -892,9 +886,7 @@ ngs_rcvdata(hook_p hook, item_p item)
TRAP_ERROR;
return (ENOBUFS);
}
- SOCK_LOCK(so);
sorwakeup(so);
- SOCK_UNLOCK(so);
return (0);
}
@@ -913,13 +905,9 @@ ngs_disconnect(hook_p hook)
if ((priv->datasock)
&& (priv->datasock->ng_socket)) {
if (NG_NODE_NUMHOOKS(node) == 1) {
- SOCK_LOCK(priv->datasock->ng_socket);
priv->datasock->ng_socket->so_state |= SS_ISCONNECTED;
- SOCK_UNLOCK(priv->datasock->ng_socket);
} else {
- SOCK_LOCK(priv->datasock->ng_socket);
priv->datasock->ng_socket->so_state &= ~SS_ISCONNECTED;
- SOCK_UNLOCK(priv->datasock->ng_socket);
}
}
@@ -944,17 +932,13 @@ ngs_shutdown(node_p node)
struct ngpcb *const pcbp = priv->ctlsock;
if (dpcbp != NULL) {
- SOCK_LOCK(dpcbp->ng_socket);
soisdisconnected(dpcbp->ng_socket);
- SOCK_UNLOCK(dpcbp->ng_socket);
dpcbp->sockdata = NULL;
priv->datasock = NULL;
priv->refs--;
}
if (pcbp != NULL) {
- SOCK_LOCK(pcbp->ng_socket);
soisdisconnected(pcbp->ng_socket);
- SOCK_UNLOCK(pcbp->ng_socket);
pcbp->sockdata = NULL;
priv->ctlsock = NULL;
priv->refs--;
OpenPOWER on IntegriCloud