]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Prevent unbuffered stderr I/O on Windows
authorMichał Kępień <michal@isc.org>
Thu, 26 Sep 2019 11:53:03 +0000 (13:53 +0200)
committerMichał Kępień <michal@isc.org>
Thu, 26 Sep 2019 11:53:03 +0000 (13:53 +0200)
Make stderr fully buffered on Windows to improve named performance when
it is logging to stderr, which happens e.g. in system tests.  Note that:

  - line buffering (_IOLBF) is unavailable on Windows,

  - fflush() is called anyway after each log message gets written to the
    default stderr logging channels created by libisc.

bin/named/main.c

index de914870ccc5e9cc553f8097c9bf9a71e9a7fa46..726a81d825ed2a26c47be132373f753aa4ee050e 100644 (file)
@@ -1398,6 +1398,17 @@ main(int argc, char *argv[]) {
        (void) ProfilerStart(NULL);
 #endif
 
+#ifdef WIN32
+       /*
+        * Prevent unbuffered I/O from crippling named performance on Windows
+        * when it is logging to stderr (e.g. in system tests).  Use full
+        * buffering (_IOFBF) as line buffering (_IOLBF) is unavailable on
+        * Windows and fflush() is called anyway after each log message gets
+        * written to the default stderr logging channels created by libisc.
+       */
+       setvbuf(stderr, NULL, _IOFBF, BUFSIZ);
+#endif
+
        /*
         * Record version in core image.
         * strings named.core | grep "named version:"