From c72da3497d821c06a9b641b1c8544f957c726238 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20K=C4=99pie=C5=84?= Date: Thu, 26 Sep 2019 13:53:03 +0200 Subject: [PATCH] Prevent unbuffered stderr I/O on Windows 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 | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bin/named/main.c b/bin/named/main.c index de914870cc..726a81d825 100644 --- a/bin/named/main.c +++ b/bin/named/main.c @@ -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:"