diff --git a/include/core/CNamedPipeFactory.h b/include/core/CNamedPipeFactory.h index 2032e7779e..9fc8b01fba 100644 --- a/include/core/CNamedPipeFactory.h +++ b/include/core/CNamedPipeFactory.h @@ -90,6 +90,11 @@ class CORE_EXPORT CNamedPipeFactory : private CNonInstantiatable { //! Default path for named pipes. static std::string defaultPath(); + //! Log warnings that have been stored because they were detected very + //! early in the program lifecycle. Programs using named pipes should + //! call this method once, after setting up logging. + static void logDeferredWarnings(); + private: #ifdef Windows using TPipeHandle = HANDLE; diff --git a/lib/core/CLogger.cc b/lib/core/CLogger.cc index 0a70d03625..3ac4f36624 100644 --- a/lib/core/CLogger.cc +++ b/lib/core/CLogger.cc @@ -314,6 +314,8 @@ bool CLogger::reconfigureLogToNamedPipe(const std::string& pipeName) { LOG_DEBUG(<< "Logger is logging to named pipe " << pipeName); + CNamedPipeFactory::logDeferredWarnings(); + return true; } diff --git a/lib/core/CNamedPipeFactory.cc b/lib/core/CNamedPipeFactory.cc index 73d9469aee..fbed87e8a8 100644 --- a/lib/core/CNamedPipeFactory.cc +++ b/lib/core/CNamedPipeFactory.cc @@ -173,13 +173,15 @@ std::string CNamedPipeFactory::defaultPath() { return path; } -CNamedPipeFactory::TPipeHandle -CNamedPipeFactory::initPipeHandle(const std::string& fileName, bool forWrite) { - if (!SIGPIPE_IGNORED) { +void CNamedPipeFactory::logDeferredWarnings() { + if (SIGPIPE_IGNORED == false) { LOG_WARN(<< "Failed to ignore SIGPIPE - this process will not terminate " "gracefully if a process it is writing to via a named pipe dies"); } +} +CNamedPipeFactory::TPipeHandle +CNamedPipeFactory::initPipeHandle(const std::string& fileName, bool forWrite) { bool madeFifo(false); // If the name already exists, ensure it refers directly (i.e. not via a diff --git a/lib/core/CNamedPipeFactory_Windows.cc b/lib/core/CNamedPipeFactory_Windows.cc index 6098e5261a..0486493c94 100644 --- a/lib/core/CNamedPipeFactory_Windows.cc +++ b/lib/core/CNamedPipeFactory_Windows.cc @@ -83,6 +83,10 @@ std::string CNamedPipeFactory::defaultPath() { return PIPE_PREFIX; } +void CNamedPipeFactory::logDeferredWarnings() { + // No-op +} + CNamedPipeFactory::TPipeHandle CNamedPipeFactory::initPipeHandle(const std::string& fileName, bool forWrite) { // Size of named pipe buffer