Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/uipc_socket.c
Context not available. | |||||
SOCKBUF_LOCK(&so->so_rcv); | SOCKBUF_LOCK(&so->so_rcv); | ||||
so->so_state &= ~SS_ISCONNECTING; | so->so_state &= ~SS_ISCONNECTING; | ||||
so->so_state |= SS_ISDISCONNECTING; | so->so_state |= SS_ISDISCONNECTING; | ||||
so->so_rcv.sb_state |= SBS_CANTRCVMORE; | socantrcvmore_locked(so); | ||||
sorwakeup_locked(so); | |||||
SOCKBUF_LOCK(&so->so_snd); | SOCKBUF_LOCK(&so->so_snd); | ||||
so->so_snd.sb_state |= SBS_CANTSENDMORE; | socantsendmore(so); | ||||
sowwakeup_locked(so); | |||||
wakeup(&so->so_timeo); | wakeup(&so->so_timeo); | ||||
} | } | ||||
Context not available. | |||||
SOCKBUF_LOCK(&so->so_rcv); | SOCKBUF_LOCK(&so->so_rcv); | ||||
so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING); | so->so_state &= ~(SS_ISCONNECTING|SS_ISCONNECTED|SS_ISDISCONNECTING); | ||||
so->so_state |= SS_ISDISCONNECTED; | so->so_state |= SS_ISDISCONNECTED; | ||||
so->so_rcv.sb_state |= SBS_CANTRCVMORE; | socantrcvmore_locked(so); | ||||
sorwakeup_locked(so); | |||||
SOCKBUF_LOCK(&so->so_snd); | SOCKBUF_LOCK(&so->so_snd); | ||||
/* | |||||
* XXX: This should use socantsendmore() but it's unclear if | |||||
* the call to sbdrop_locked() can be moved without opening | |||||
* a race. | |||||
*/ | |||||
so->so_snd.sb_state |= SBS_CANTSENDMORE; | so->so_snd.sb_state |= SBS_CANTSENDMORE; | ||||
sbdrop_locked(&so->so_snd, sbused(&so->so_snd)); | sbdrop_locked(&so->so_snd, sbused(&so->so_snd)); | ||||
sowwakeup_locked(so); | sowwakeup_locked(so); | ||||
Context not available. |