-
Notifications
You must be signed in to change notification settings - Fork 740
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Disable ran away test that works in local machines but for some reason fails in the official builders. PR: 272755 Reported by: hiroo.ono+freebsd@gmail.com
- Loading branch information
Showing
2 changed files
with
277 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,276 @@ | ||
--- acinclude.m4.orig 2023-07-27 14:17:06 UTC | ||
+++ acinclude.m4 | ||
@@ -437,270 +437,10 @@ unset pipeside | ||
#This little hack tries to make an educated guess as to what is the | ||
#case on this particular system. | ||
AC_MSG_CHECKING(read/send-side pipe system) | ||
-AC_TRY_RUN([ | ||
-#include <sys/types.h> | ||
-#include <sys/socket.h> | ||
+#This test is known to fail on the FreeBSD's official packaging | ||
+#machine. Set it to recvbased as FreeBSD is known to be. | ||
-#include <assert.h> | ||
-#include <stdio.h> | ||
-#include <stdlib.h> | ||
-#include <string.h> | ||
-#include <unistd.h> | ||
-#include <fcntl.h> | ||
-#include <errno.h> | ||
- | ||
-#ifndef MIN | ||
-#define MIN(a,b) ((a) < (b) ? (a) : (b)) | ||
-#endif /* !MIN */ | ||
- | ||
-#if NEED_AF_LOCAL | ||
-#define AF_LOCAL AF_UNIX | ||
-#endif /* NEED_AF_LOCAL */ | ||
- | ||
-#define PACKETSIZE (1024) | ||
- | ||
-#define PADBYTES (sizeof(short) * (64)) | ||
-/* | ||
- * Just a wild guess. Dante uses sizeof(long). | ||
- */ | ||
- | ||
-#define SEND_PIPE (0) | ||
-#define RECV_PIPE (1) | ||
- | ||
-#define EXIT_OK (0) /* type successfully determined */ | ||
-#define EXIT_UNKNOWN (1) /* error: unable to determine type */ | ||
- | ||
-static void | ||
-setsockets(const int doreverse, const size_t packetsize, | ||
- const int s, const int r, | ||
- int *sndbuf, int *sndbuf_set, | ||
- int *rcvbuf, int *rcvbuf_set); | ||
- | ||
-static size_t | ||
-sendtest(const int s, const char *buf, const size_t buflen); | ||
- | ||
-void | ||
-reswrite(const char *res); | ||
- | ||
-int | ||
-main(void) | ||
-{ | ||
- size_t sent, packetcount; | ||
- int sndbuf, sndbuf_set, rcvbuf, rcvbuf_set; | ||
- char buf[PACKETSIZE]; | ||
- int datapipev[2]; | ||
- | ||
- if (socketpair(AF_LOCAL, SOCK_DGRAM, 0, datapipev) != 0) { | ||
- perror("socketpair()"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- setsockets(0, | ||
- PACKETSIZE, | ||
- datapipev[SEND_PIPE], | ||
- datapipev[RECV_PIPE], | ||
- &sndbuf, &sndbuf_set, | ||
- &rcvbuf, &rcvbuf_set); | ||
- | ||
- packetcount = MIN(sndbuf, sndbuf_set) / (PACKETSIZE + PADBYTES); | ||
- | ||
- fprintf(stderr, | ||
- "Requested sndbuf to be %d, is %d. " | ||
- "Requested rcvbuf to be %d, is %d.\n" | ||
- "Calculated packetcount is %lu\n", | ||
- sndbuf, sndbuf_set, | ||
- rcvbuf, rcvbuf_set, | ||
- (unsigned long)packetcount); | ||
- | ||
- sent = sendtest(datapipev[SEND_PIPE], buf, PACKETSIZE) / PACKETSIZE; | ||
- | ||
- if (sent >= packetcount) { | ||
- fprintf(stderr, "status determined by send-side\n"); | ||
- reswrite("sendbased"); | ||
- exit(EXIT_OK); | ||
- } | ||
- | ||
- /* | ||
- * Try the reverse. Perhaps this system wants a large rcvbuf rather than | ||
- * a large sndbuf. | ||
- */ | ||
- close(datapipev[SEND_PIPE]); | ||
- close(datapipev[RECV_PIPE]); | ||
- | ||
- if (socketpair(AF_LOCAL, SOCK_DGRAM, 0, datapipev) != 0) { | ||
- perror("socketpair()"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- setsockets(1, | ||
- PACKETSIZE, | ||
- datapipev[SEND_PIPE], | ||
- datapipev[RECV_PIPE], | ||
- &sndbuf, &sndbuf_set, | ||
- &rcvbuf, &rcvbuf_set); | ||
- | ||
- packetcount = MIN(rcvbuf, rcvbuf_set) / (PACKETSIZE + PADBYTES); | ||
- | ||
- fprintf(stderr, | ||
- "Requested sndbuf to be %d, is %d. " | ||
- "Requested rcvbuf to be %d, is %d.\n" | ||
- "Calculated packetcount is %lu\n", | ||
- sndbuf, sndbuf_set, | ||
- rcvbuf, rcvbuf_set, | ||
- (unsigned long)packetcount); | ||
- | ||
- sent = sendtest(datapipev[SEND_PIPE], buf, PACKETSIZE) / PACKETSIZE; | ||
- | ||
- if (sent >= packetcount) { | ||
- fprintf(stderr, "status determined by read-side\n"); | ||
- reswrite("recvbased"); | ||
- exit(EXIT_OK); | ||
- } | ||
- | ||
- fprintf(stderr, "status is unknown\n"); | ||
- return EXIT_UNKNOWN; | ||
-} | ||
- | ||
-static void | ||
-setsockets(doreverse, packetsize, s, r, sndbuf, sndbuf_set, rcvbuf, rcvbuf_set) | ||
- const int doreverse; | ||
- const size_t packetsize; | ||
- const int s; | ||
- const int r; | ||
- int *sndbuf, *sndbuf_set; | ||
- int *rcvbuf, *rcvbuf_set; | ||
-{ | ||
- socklen_t len; | ||
- int p; | ||
- | ||
- if ((p = fcntl(s, F_GETFL, 0)) == -1 | ||
- || fcntl(s, F_SETFL, p | O_NONBLOCK) == -1 | ||
- || fcntl(r, F_SETFL, p | O_NONBLOCK) == -1) { | ||
- perror("fcntl(F_SETFL/F_GETFL, O_NONBLOCK) failed"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- len = sizeof(*sndbuf_set); | ||
- | ||
- if (doreverse) { | ||
- *sndbuf = packetsize + PADBYTES; | ||
- | ||
- if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf, sizeof(*sndbuf)) != 0) { | ||
- perror("setsockopt(SO_SNDBUF)"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- if (getsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf_set, &len) != 0) { | ||
- perror("getsockopt(SO_SNDBUF)"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- *rcvbuf = *sndbuf_set * 10; | ||
- if (setsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf, sizeof(*rcvbuf)) != 0) { | ||
- perror("setsockopt(SO_RCVBUF)"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- } | ||
- else { | ||
- *rcvbuf = packetsize + PADBYTES; | ||
- | ||
- if (setsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf, sizeof(*rcvbuf)) != 0) { | ||
- perror("setsockopt(SO_RCVBUF)"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- if (getsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf_set, &len) != 0) { | ||
- perror("getsockopt(SO_RCVBUF)"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- *sndbuf = *rcvbuf_set * 10; | ||
- if (setsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf, sizeof(*sndbuf)) != 0) { | ||
- perror("setsockopt(SO_SNDBUF)"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- } | ||
- | ||
- if (getsockopt(s, SOL_SOCKET, SO_SNDBUF, sndbuf_set, &len) != 0 | ||
- || getsockopt(r, SOL_SOCKET, SO_RCVBUF, rcvbuf_set, &len) != 0) { | ||
- perror("getsockopt(SO_SNDBUF/SO_RCVBUF)"); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- | ||
- fprintf(stderr, "sndbuf is %lu, rcvbuf is %lu\n", | ||
- (unsigned long)*sndbuf_set, (unsigned long)*rcvbuf_set); | ||
- | ||
- if (doreverse) { | ||
- if (*rcvbuf_set < *rcvbuf) { | ||
- fprintf(stderr, "failed to set rcvbuf to %lu. Is %lu\n", | ||
- (unsigned long)*rcvbuf, (unsigned long)*rcvbuf_set); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- } | ||
- else { | ||
- if (*sndbuf_set < *sndbuf) { | ||
- fprintf(stderr, "failed to set sndbuf to %lu (is %lu)\n", | ||
- (unsigned long)*sndbuf, (unsigned long)*sndbuf_set); | ||
- exit(EXIT_UNKNOWN); | ||
- } | ||
- } | ||
-} | ||
- | ||
-static size_t | ||
-sendtest(s, buf, buflen) | ||
- const int s; | ||
- const char *buf; | ||
- const size_t buflen; | ||
-{ | ||
- ssize_t rc; | ||
- size_t sent; | ||
- int i; | ||
- | ||
- i = 1; | ||
- sent = 0; | ||
- errno = 0; | ||
- | ||
- while (1) { | ||
- if ((rc = write(s, buf, buflen)) == -1) | ||
- break; | ||
- else { | ||
- assert(rc == (ssize_t)buflen); | ||
- | ||
- ++i; | ||
- sent += rc; | ||
- } | ||
- } | ||
- | ||
- fprintf(stderr, | ||
- "failed sending packet #%d, sent %ld/%ld. " | ||
- "Total bytes sent: %lu. Error on last packet: %s\n", | ||
- i, | ||
- (long)rc, | ||
- (unsigned long)buflen, | ||
- (unsigned long)sent, | ||
- strerror(errno)); | ||
- | ||
- return sent; | ||
-} | ||
- | ||
-void | ||
-reswrite(res) | ||
- const char *res; | ||
-{ | ||
- FILE *fp; | ||
- if ((fp = fopen("conftest.out", "w")) == NULL) { | ||
- perror("fopen"); | ||
- exit(1); | ||
- } | ||
- fprintf(fp, "%s\n", res); | ||
- fclose(fp); | ||
-}], [pipeside=`cat conftest.out` | ||
- AC_MSG_RESULT([$pipeside]) | ||
-], [AC_MSG_RESULT(unknown)], | ||
- [dnl XXX assume no when cross-compiling | ||
- AC_MSG_RESULT(cross-compiling, assuming unknown)]) | ||
- | ||
-case $pipeside in | ||
+case "recvbased" in | ||
recvbased) | ||
AC_DEFINE(HAVE_PIPEBUFFER_RECV_BASED, 1, [platform pipe behavior]) | ||
;; |