From dbd4c293c27d5c255f72e3fee044266016980dc8 Mon Sep 17 00:00:00 2001 From: claudio Date: Tue, 7 May 2024 15:54:23 +0000 Subject: [PATCH] rw_enter() with RW_NOSLEEP returns EBUSY and not the expected EWOULDBLOCK This fixes random gmake failures during ports builds caused by: gmake[2]: *** read jobs pipe: Device busy. Stop. Fix verified by tb@ on his bulk build box OK mvs@ tb@ --- sys/kern/uipc_socket2.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index e8401225fdb..96e24f8d3d9 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uipc_socket2.c,v 1.153 2024/05/03 17:43:09 mvs Exp $ */ +/* $OpenBSD: uipc_socket2.c,v 1.154 2024/05/07 15:54:23 claudio Exp $ */ /* $NetBSD: uipc_socket2.c,v 1.11 1996/02/04 02:17:55 christos Exp $ */ /* @@ -552,7 +552,10 @@ sblock(struct socket *so, struct sockbuf *sb, int flags) if (!(flags & SBL_WAIT)) rwflags |= RW_NOSLEEP; - return rw_enter(&sb->sb_lock, rwflags); + error = rw_enter(&sb->sb_lock, rwflags); + if (error == EBUSY) + error = EWOULDBLOCK; + return error; } soassertlocked(so); -- 2.20.1