Module Name:    src
Committed By:   rin
Date:           Fri Aug 23 07:13:50 UTC 2024

Modified Files:
        src/tests/kernel/kqueue: t_empty.c
        src/tests/net/net: t_tcp.c

Log Message:
tests: Fix false positives due to race b/w connect(2) and accept(2)

For kernel/kqueue/t_empty and net/net/t_tcp, there were no sync ops
b/w connect(2) and accept(2) for non-blocking socket pair on host
(rump is not used).

As a result, accept(2) can fail immediately with EAGAIN, when
kernel-side routines for connect(2) and accept(2) are processed in
different CPU cores.

1-sec sleep(3) between two syscalls seems to mitigate this problem
as far as I can see, although this should not be a perfect solution...

Thanks ozaki-r@ for discussion.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/tests/kernel/kqueue/t_empty.c
cvs rdiff -u -r1.12 -r1.13 src/tests/net/net/t_tcp.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/tests/kernel/kqueue/t_empty.c
diff -u src/tests/kernel/kqueue/t_empty.c:1.1 src/tests/kernel/kqueue/t_empty.c:1.2
--- src/tests/kernel/kqueue/t_empty.c:1.1	Sat Oct 23 01:28:33 2021
+++ src/tests/kernel/kqueue/t_empty.c	Fri Aug 23 07:13:50 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: t_empty.c,v 1.1 2021/10/23 01:28:33 thorpej Exp $ */
+/* $NetBSD: t_empty.c,v 1.2 2024/08/23 07:13:50 rin Exp $ */
 
 /*-
  * Copyright (c) 2021 The NetBSD Foundation, Inc.
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__RCSID("$NetBSD: t_empty.c,v 1.1 2021/10/23 01:28:33 thorpej Exp $");
+__RCSID("$NetBSD: t_empty.c,v 1.2 2024/08/23 07:13:50 rin Exp $");
 
 #include <sys/event.h>
 #include <sys/socket.h>
@@ -163,6 +163,9 @@ ATF_TC_BODY(sock_tcp, tc)
 	ATF_REQUIRE_ERRNO(EINPROGRESS,
 	    connect(writesock, (struct sockaddr *)&sin, sizeof(sin)) == -1);
 
+	/* XXX Avoid race between connect(2) and accept(2). */
+	sleep(1);
+
 	slen = sizeof(sin);
 	ATF_REQUIRE((readsock = accept(readsock, (struct sockaddr *)&sin,
 	    &slen)) != -1);

Index: src/tests/net/net/t_tcp.c
diff -u src/tests/net/net/t_tcp.c:1.12 src/tests/net/net/t_tcp.c:1.13
--- src/tests/net/net/t_tcp.c:1.12	Mon Nov  8 10:57:09 2021
+++ src/tests/net/net/t_tcp.c	Fri Aug 23 07:13:50 2024
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_tcp.c,v 1.12 2021/11/08 10:57:09 rin Exp $	*/
+/*	$NetBSD: t_tcp.c,v 1.13 2024/08/23 07:13:50 rin Exp $	*/
 
 /*-
  * Copyright (c) 2013 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #ifdef __RCSID
-__RCSID("$Id: t_tcp.c,v 1.12 2021/11/08 10:57:09 rin Exp $");
+__RCSID("$Id: t_tcp.c,v 1.13 2024/08/23 07:13:50 rin Exp $");
 #endif
 
 /* Example code. Should block; does with accept not accept4_. */
@@ -159,6 +159,10 @@ accept_test(sa_family_t sfamily, sa_fami
 	if (ok != -1 || errno != EINPROGRESS)
 		FAIL("expected connect to fail");
 #endif
+
+	/* XXX avoid race between connect(2) and accept(2). */
+	sleep(1);
+
 	if (useaccept) {
 		acpt = accept(srvr, NULL, NULL);
 	} else {

Reply via email to