From aa4c7489b708eb54856871ecdf2bbde99fde92bc Mon Sep 17 00:00:00 2001 From: Sadie Powell Date: Mon, 1 Feb 2021 18:10:53 +0000 Subject: [PATCH] Duplicate the stdout file handle when used for logging. Failure to do this may result in a crash on shutdown when started in debug mode. --- src/inspircd.cpp | 3 ++- win/inspircd_win32wrapper.h | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/inspircd.cpp b/src/inspircd.cpp index ba7e08eff..8cbb83d6f 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -524,7 +524,8 @@ InspIRCd::InspIRCd(int argc, char** argv) if (Config->cmdline.forcedebug) { - FileWriter* fw = new FileWriter(stdout, 1); + FILE* newstdout = fdopen(dup(STDOUT_FILENO), "w"); + FileWriter* fw = new FileWriter(newstdout, 1); FileLogStream* fls = new FileLogStream(LOG_RAWIO, fw); Logs->AddLogTypes("*", fls, true); } diff --git a/win/inspircd_win32wrapper.h b/win/inspircd_win32wrapper.h index 7366fc336..368504d61 100644 --- a/win/inspircd_win32wrapper.h +++ b/win/inspircd_win32wrapper.h @@ -102,6 +102,8 @@ typedef SSIZE_T ssize_t; #define popen _popen #define pclose _pclose #define getpid _getpid +#define dup _dup +#define fdopen _fdopen // warning: 'identifier' : class 'type' needs to have dll-interface to be used by clients of class 'type2' // Normally, this is a huge problem, but due to our new/delete remap, we can ignore it. -- 2.39.2