rw_enter() with RW_NOSLEEP returns EBUSY and not the expected EWOULDBLOCK
authorclaudio <claudio@openbsd.org>
Tue, 7 May 2024 15:54:23 +0000 (15:54 +0000)
committerclaudio <claudio@openbsd.org>
Tue, 7 May 2024 15:54:23 +0000 (15:54 +0000)
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

index e840122..96e24f8 100644 (file)
@@ -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);