From: Sepherosa Ziehau Date: Tue, 17 Nov 2015 06:51:00 +0000 (+0800) Subject: udp: Wakeup callers sleeping on failed to connect socket. X-Git-Tag: v4.5.0~59 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/1b40a5cfd8b6eee2522ca6337e9309c178cf9f4e udp: Wakeup callers sleeping on failed to connect socket. --- diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index 3d1b97777a..bbc96b7caf 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -1592,7 +1592,18 @@ out: lwkt_rele(td); if (error && (msg->connect.nm_flags & PRUC_ASYNC)) { so->so_error = error; - soclrstate(so, SS_ISCONNECTED); /* XXX */ + soclrstate(so, SS_ISCONNECTED); + /* + * Wake up callers blocked on this socket to make sure + * that they can see this error. + * + * NOTE: + * sodisconnected() can't be used here, which bricks + * sending and receiving. + */ + wakeup(&so->so_timeo); + sowwakeup(so); + sorwakeup(so); } if (error && inp != NULL && inp->inp_lport != 0 && (inp->inp_flags & INP_WILDCARD) == 0) {