From: Otto Moerbeek Date: Wed, 8 Feb 2023 14:45:01 +0000 (+0100) Subject: Set trace fd to non-blocking and report errors writing X-Git-Tag: dnsdist-1.8.0-rc1~38^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0bae2bddd059f4520fc8fca2846c2ce739de956d;p=thirdparty%2Fpdns.git Set trace fd to non-blocking and report errors writing --- diff --git a/pdns/recursordist/pdns_recursor.cc b/pdns/recursordist/pdns_recursor.cc index a54f055fd3..64d56f4376 100644 --- a/pdns/recursordist/pdns_recursor.cc +++ b/pdns/recursordist/pdns_recursor.cc @@ -852,6 +852,7 @@ static void dumpTrace(const string& trace, const timeval& timev) g_slog->withName("trace")->error(Logr::Error, err, "Could not dup trace file")); return; } + setNonBlocking(traceFd); auto filep = std::unique_ptr(fdopen(traceFd, "a"), &fclose); if (!filep) { int err = errno; @@ -866,6 +867,11 @@ static void dumpTrace(const string& trace, const timeval& timev) fprintf(filep.get(), "%s", trace.c_str()); isoDateTimeMillis(now, timebuf.data(), timebuf.size()); fprintf(filep.get(), "=== END OF TRACE %s ===\n", timebuf.data()); + if (ferror(filep.get())) { + int err = errno; + SLOG(g_log << Logger::Error << "Problems writing to trace file: " << stringerror(err) << endl, + g_slog->withName("trace")->error(Logr::Error, err, "Problems writing to trace file")); + } // fclose by unique_ptr does implicit flush }