]> granicus.if.org Git - libevent/commitdiff
configure: avoid false positive in DragonFlyBSD
authorCarlo Marcelo Arenas Belón <carenas@gmail.com>
Sat, 19 Aug 2017 23:01:46 +0000 (16:01 -0700)
committerAzat Khuzhin <a3at.mail@gmail.com>
Sun, 10 Sep 2017 22:48:35 +0000 (01:48 +0300)
by default, the max buffer size is 16K and histeresis is at 50%, so
a bigger read is needed to unlock writes than you would expect from
other BSD (512 bytes)

this doesn't introduce any regression on FreeBSD 11.1, OpenBSD 6.1, NetBSD 7.1,
macOS 10.12.6 and of course DragonFlyBSD 4.8.1, and most of them show
a max pipe size of 64K, so the read call should drain them all regardless
of how conservative they are on the free pipe space they will require
(usually 512 bytes) before kevent reports the fd as ready for write.

I couldn't find a reference to which bug this code was trying to look for
and it seems to be there from the beginning of git history so it might be
no longer relevant.

Issue: #548

cmake/CheckWorkingKqueue.cmake
configure.ac

index 47bf4e838a9174913307e4f788d815647c95502b..f22f011b5875020a5c060a1d8e045ca099c3d0c9 100644 (file)
@@ -17,7 +17,7 @@ main(int argc, char **argv)
     int fd[2];
     struct kevent ev;
     struct timespec ts;
-    char buf[8000];
+    char buf[80000];
 
     if (pipe(fd) == -1)
         exit(1);
@@ -27,7 +27,7 @@ main(int argc, char **argv)
     while ((n = write(fd[1], buf, sizeof(buf))) == sizeof(buf))
         ;
 
-        if ((kq = kqueue()) == -1)
+    if ((kq = kqueue()) == -1)
         exit(1);
 
     memset(&ev, 0, sizeof(ev));
@@ -49,4 +49,4 @@ main(int argc, char **argv)
     exit(0);
 }
 
-" EVENT__HAVE_WORKING_KQUEUE)
\ No newline at end of file
+" EVENT__HAVE_WORKING_KQUEUE)
index 696c8cd6c94e50b440f26d56c62a8baa4b07432d..e5088ac515c2b936906d85fa370ddaea51095efa 100644 (file)
@@ -517,6 +517,12 @@ if test "x$ac_cv_header_sys_event_h" = "xyes"; then
        if test "x$havekqueue" = "xyes" ; then
                AC_MSG_CHECKING(for working kqueue)
                AC_TRY_RUN(
+#ifdef HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
 #include <sys/types.h>
 #include <sys/time.h>
 #include <sys/event.h>
@@ -532,7 +538,7 @@ main(int argc, char **argv)
        int fd[[2]];
        struct kevent ev;
        struct timespec ts;
-       char buf[[8000]];
+       char buf[[80000]];
 
        if (pipe(fd) == -1)
                exit(1);