Module Name: src
Committed By: christos
Date: Sun Mar 21 16:58:07 UTC 2021
Modified Files:
src/tests/lib/libc/sys: t_sendrecv.c
Log Message:
use a pipe instead of sched_yield()
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/tests/lib/libc/sys/t_sendrecv.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/lib/libc/sys/t_sendrecv.c
diff -u src/tests/lib/libc/sys/t_sendrecv.c:1.6 src/tests/lib/libc/sys/t_sendrecv.c:1.7
--- src/tests/lib/libc/sys/t_sendrecv.c:1.6 Sat Feb 2 22:19:28 2019
+++ src/tests/lib/libc/sys/t_sendrecv.c Sun Mar 21 12:58:07 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: t_sendrecv.c,v 1.6 2019/02/03 03:19:28 mrg Exp $ */
+/* $NetBSD: t_sendrecv.c,v 1.7 2021/03/21 16:58:07 christos Exp $ */
/*-
* Copyright (c) 2018 The NetBSD Foundation, Inc.
@@ -29,7 +29,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
-__RCSID("$NetBSD: t_sendrecv.c,v 1.6 2019/02/03 03:19:28 mrg Exp $");
+__RCSID("$NetBSD: t_sendrecv.c,v 1.7 2021/03/21 16:58:07 christos Exp $");
#include <atf-c.h>
#include <sys/types.h>
@@ -41,7 +41,6 @@ __RCSID("$NetBSD: t_sendrecv.c,v 1.6 201
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
-#include <sched.h>
#include <signal.h>
@@ -62,33 +61,33 @@ handle_sigchld(__unused int pid)
}
static void
-sender(int fd)
+sender(int sd)
{
union packet p;
ssize_t n;
p.seq = 0;
for (size_t i = 0; i < COUNT; i++) {
- for (; (n = send(fd, &p, sizeof(p), 0)) == sizeof(p);
+ for (; (n = send(sd, &p, sizeof(p), 0)) == sizeof(p);
p.seq++)
continue;
- printf(">>%zd %d %ju\n", n, errno, p.seq);
+// printf(">>%zd %d %ju\n", n, errno, p.seq);
ATF_REQUIRE_MSG(errno == ENOBUFS, "send %s", strerror(errno));
-// sched_yield();
}
- printf("sender done\n");
+ close(sd);
+// printf("sender done\n");
}
static void
-receiver(int fd)
+receiver(int sd)
{
union packet p;
ssize_t n;
uintmax_t seq = 0;
- do {
+ for (size_t i = 0; i < COUNT; i++) {
if (rdied)
return;
- while ((n = recv(fd, &p, sizeof(p), 0), sizeof(p))
+ while ((n = recv(sd, &p, sizeof(p), 0), sizeof(p))
== sizeof(p))
{
if (rdied)
@@ -97,26 +96,29 @@ receiver(int fd)
printf("%ju != %ju\n", p.seq, seq);
seq = p.seq + 1;
}
- printf("<<%zd %d %ju\n", n, errno, seq);
+// printf("<<%zd %d %ju\n", n, errno, seq);
if (n == 0)
return;
ATF_REQUIRE_EQ(n, -1);
ATF_REQUIRE_MSG(errno == ENOBUFS, "recv %s", strerror(errno));
- } while (p.seq < COUNT);
+ }
+ close(sd);
}
static void
sendrecv(int rerror)
{
- int fd[2], error;
+ int fd[2], sd[2], error;
+ char c = 0;
struct sigaction sa;
- error = socketpair(AF_UNIX, SOCK_DGRAM, 0, fd);
-// error = pipe(fd);
+ error = socketpair(AF_UNIX, SOCK_DGRAM, 0, sd);
ATF_REQUIRE_MSG(error != -1, "socketpair failed (%s)", strerror(errno));
+ error = pipe(fd);
+ ATF_REQUIRE_MSG(error != -1, "pipe failed (%s)", strerror(errno));
- for (size_t i = 0; i < __arraycount(fd); i++) {
- error = setsockopt(fd[i], SOL_SOCKET, SO_RERROR, &rerror,
+ for (size_t i = 0; i < __arraycount(sd); i++) {
+ error = setsockopt(sd[i], SOL_SOCKET, SO_RERROR, &rerror,
sizeof(rerror));
ATF_REQUIRE_MSG(error != -1,
"setsockopt(SO_RERROR) failed (%s)", strerror(errno));
@@ -133,17 +135,18 @@ sendrecv(int rerror)
switch (fork()) {
case -1:
ATF_REQUIRE_MSG(errno == 0,
- "socketpair failed (%s)", strerror(errno));
+ "fork failed (%s)", strerror(errno));
__unreachable();
/*NOTREACHED*/
case 0:
- sched_yield();
- sender(fd[0]);
- close(fd[0]);
+ read(fd[1], &c, sizeof(c));
+ sender(sd[0]);
+ close(sd[0]);
exit(EXIT_SUCCESS);
/*NOTREACHED*/
default:
- receiver(fd[1]);
+ write(fd[0], &c, sizeof(c));
+ receiver(sd[1]);
return;
}
}