summaryrefslogtreecommitdiff
path: root/sys/kern
diff options
context:
space:
mode:
authorRobert Watson <rwatson@FreeBSD.org>2004-06-26 19:10:39 +0000
committerRobert Watson <rwatson@FreeBSD.org>2004-06-26 19:10:39 +0000
commit1e4d7da707ea9277eb623e87861e8fe1affe8936 (patch)
tree0215a39aaab05d8f4180c75adc66451aa52aac5c /sys/kern
parentdf68e345c5b240f5f39fa18d02484b411a55e1d3 (diff)
Notes
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/uipc_sockbuf.c13
-rw-r--r--sys/kern/uipc_socket2.c13
-rw-r--r--sys/kern/uipc_usrreq.c9
3 files changed, 13 insertions, 22 deletions
diff --git a/sys/kern/uipc_sockbuf.c b/sys/kern/uipc_sockbuf.c
index e366c3c89769..efcea0c4575f 100644
--- a/sys/kern/uipc_sockbuf.c
+++ b/sys/kern/uipc_sockbuf.c
@@ -169,13 +169,11 @@ soisdisconnecting(so)
SOCK_UNLOCK(so);
SOCKBUF_LOCK(&so->so_rcv);
so->so_rcv.sb_state |= SBS_CANTRCVMORE;
- SOCKBUF_UNLOCK(&so->so_rcv);
+ sorwakeup_locked(so);
SOCKBUF_LOCK(&so->so_snd);
so->so_snd.sb_state |= SBS_CANTSENDMORE;
- SOCKBUF_UNLOCK(&so->so_snd);
+ sowwakeup_locked(so);
wakeup(&so->so_timeo);
- sowwakeup(so);
- sorwakeup(so);
}
void
@@ -188,20 +186,19 @@ soisdisconnected(so)
* SOCKBUF_LOCK(&so->so_rcv) even though they are the same mutex to
* avoid introducing the assumption that they are the same.
*/
+ /* XXXRW: so_state locking? */
SOCK_LOCK(so);
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= SS_ISDISCONNECTED;
SOCK_UNLOCK(so);
SOCKBUF_LOCK(&so->so_rcv);
so->so_rcv.sb_state |= SBS_CANTRCVMORE;
- SOCKBUF_UNLOCK(&so->so_rcv);
+ sorwakeup_locked(so);
SOCKBUF_LOCK(&so->so_snd);
so->so_snd.sb_state |= SBS_CANTSENDMORE;
sbdrop_locked(&so->so_snd, so->so_snd.sb_cc);
- SOCKBUF_UNLOCK(&so->so_snd);
+ sowwakeup_locked(so);
wakeup(&so->so_timeo);
- sowwakeup(so);
- sorwakeup(so);
}
/*
diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c
index e366c3c89769..efcea0c4575f 100644
--- a/sys/kern/uipc_socket2.c
+++ b/sys/kern/uipc_socket2.c
@@ -169,13 +169,11 @@ soisdisconnecting(so)
SOCK_UNLOCK(so);
SOCKBUF_LOCK(&so->so_rcv);
so->so_rcv.sb_state |= SBS_CANTRCVMORE;
- SOCKBUF_UNLOCK(&so->so_rcv);
+ sorwakeup_locked(so);
SOCKBUF_LOCK(&so->so_snd);
so->so_snd.sb_state |= SBS_CANTSENDMORE;
- SOCKBUF_UNLOCK(&so->so_snd);
+ sowwakeup_locked(so);
wakeup(&so->so_timeo);
- sowwakeup(so);
- sorwakeup(so);
}
void
@@ -188,20 +186,19 @@ soisdisconnected(so)
* SOCKBUF_LOCK(&so->so_rcv) even though they are the same mutex to
* avoid introducing the assumption that they are the same.
*/
+ /* XXXRW: so_state locking? */
SOCK_LOCK(so);
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING);
so->so_state |= SS_ISDISCONNECTED;
SOCK_UNLOCK(so);
SOCKBUF_LOCK(&so->so_rcv);
so->so_rcv.sb_state |= SBS_CANTRCVMORE;
- SOCKBUF_UNLOCK(&so->so_rcv);
+ sorwakeup_locked(so);
SOCKBUF_LOCK(&so->so_snd);
so->so_snd.sb_state |= SBS_CANTSENDMORE;
sbdrop_locked(&so->so_snd, so->so_snd.sb_cc);
- SOCKBUF_UNLOCK(&so->so_snd);
+ sowwakeup_locked(so);
wakeup(&so->so_timeo);
- sowwakeup(so);
- sorwakeup(so);
}
/*
diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c
index 862b7bef391f..95e4874ec818 100644
--- a/sys/kern/uipc_usrreq.c
+++ b/sys/kern/uipc_usrreq.c
@@ -294,8 +294,7 @@ uipc_rcvd(struct socket *so, int flags)
newhiwat, RLIM_INFINITY);
unp->unp_cc = so->so_rcv.sb_cc;
SOCKBUF_UNLOCK(&so->so_rcv);
- SOCKBUF_UNLOCK(&so2->so_snd);
- sowwakeup(so2);
+ sowwakeup_locked(so2);
break;
default:
@@ -355,8 +354,7 @@ uipc_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam,
from = &sun_noname;
SOCKBUF_LOCK(&so2->so_rcv);
if (sbappendaddr_locked(&so2->so_rcv, from, m, control)) {
- SOCKBUF_UNLOCK(&so2->so_rcv);
- sorwakeup(so2);
+ sorwakeup_locked(so2);
m = NULL;
control = NULL;
} else {
@@ -412,8 +410,7 @@ uipc_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *nam,
(void)chgsbsize(so->so_cred->cr_uidinfo, &so->so_snd.sb_hiwat,
newhiwat, RLIM_INFINITY);
unp->unp_conn->unp_cc = so2->so_rcv.sb_cc;
- SOCKBUF_UNLOCK(&so2->so_rcv);
- sorwakeup(so2);
+ sorwakeup_locked(so2);
m = NULL;
break;