From ad6b0efff5a33fca98e128c02617ea7c765a84d9 Mon Sep 17 00:00:00 2001 From: Robert Watson Date: Thu, 24 Jun 2004 01:43:23 +0000 Subject: [PATCH] Acquire socket lock in the "waiting for connection" loop in kern_connect(), replacing tsleep() with msleep() with the socket mutex. --- sys/kern/uipc_syscalls.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index 674e6fe9d306..890f2b329e68 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -501,8 +501,10 @@ kern_connect(td, fd, sa) goto done1; } s = splnet(); + SOCK_LOCK(so); while ((so->so_state & SS_ISCONNECTING) && so->so_error == 0) { - error = tsleep(&so->so_timeo, PSOCK | PCATCH, "connec", 0); + error = msleep(&so->so_timeo, SOCK_MTX(so), PSOCK | PCATCH, + "connec", 0); if (error) { if (error == EINTR || error == ERESTART) interrupted = 1; @@ -513,6 +515,7 @@ kern_connect(td, fd, sa) error = so->so_error; so->so_error = 0; } + SOCK_UNLOCK(so); splx(s); bad: if (!interrupted)