loolwsd/LOOLForKit.cpp | 10 +++++----- loolwsd/LOOLKit.cpp | 14 +++++++------- loolwsd/LOOLWSD.cpp | 18 +++++++++++++----- loolwsd/Log.cpp | 10 ++++++++++ loolwsd/Log.hpp | 8 ++++++++ 5 files changed, 43 insertions(+), 17 deletions(-)
New commits: commit 650ab54d00594fdf5746e2517f4d7a90109ec376 Author: Tor Lillqvist <t...@collabora.com> Date: Fri Oct 14 12:57:27 2016 +0300 Log fatal errors as such diff --git a/loolwsd/LOOLForKit.cpp b/loolwsd/LOOLForKit.cpp index a5f97a4..7f95ef2 100644 --- a/loolwsd/LOOLForKit.cpp +++ b/loolwsd/LOOLForKit.cpp @@ -112,7 +112,7 @@ static bool haveCapability(cap_value_t capability) if (caps == nullptr) { - Log::syserror("cap_get_proc() failed."); + Log::sysfatal("cap_get_proc() failed."); return false; } @@ -123,12 +123,12 @@ static bool haveCapability(cap_value_t capability) { if (cap_name) { - Log::syserror("cap_get_flag failed for " + std::string(cap_name) + "."); + Log::sysfatal("cap_get_flag failed for " + std::string(cap_name) + "."); cap_free(cap_name); } else { - Log::syserror("cap_get_flag failed for capability " + std::to_string(capability) + "."); + Log::sysfatal("cap_get_flag failed for capability " + std::to_string(capability) + "."); } return false; } @@ -137,7 +137,7 @@ static bool haveCapability(cap_value_t capability) { if (cap_name) { - Log::error("Capability " + std::string(cap_name) + " is not set for the loolforkit program."); + Log::fatal("Capability " + std::string(cap_name) + " is not set for the loolforkit program."); cap_free(cap_name); } else @@ -376,7 +376,7 @@ int main(int argc, char** argv) // Ask this first child to send version information to master process if (createLibreOfficeKit(childRoot, sysTemplate, loTemplate, loSubPath, true) < 0) { - Log::error("Failed to create a kit process."); + Log::fatal("Failed to create a kit process."); std::_Exit(Application::EXIT_SOFTWARE); } diff --git a/loolwsd/LOOLKit.cpp b/loolwsd/LOOLKit.cpp index 426d684..cd62e12 100644 --- a/loolwsd/LOOLKit.cpp +++ b/loolwsd/LOOLKit.cpp @@ -179,7 +179,7 @@ namespace Log::error("nftw: stat failed for '" + std::string(fpath) + "'"); return 1; default: - Log::error("nftw: unexpected type: '" + std::to_string(typeflag)); + Log::fatal("nftw: unexpected type: '" + std::to_string(typeflag)); assert(false); break; } @@ -1454,7 +1454,7 @@ void lokit_main(const std::string& childRoot, loKit = std::make_shared<lok::Office>(kit); if (!loKit || !loKit->get()) { - Log::error("LibreOfficeKit initialization failed. Exiting."); + Log::fatal("LibreOfficeKit initialization failed. Exiting."); std::_Exit(Application::EXIT_SOFTWARE); } } @@ -1616,7 +1616,7 @@ bool globalPreinit(const std::string &loTemplate) handle = dlopen(libMerged.c_str(), RTLD_GLOBAL|RTLD_NOW); if (!handle) { - Log::error("Failed to load " + libMerged + ": " + std::string(dlerror())); + Log::fatal("Failed to load " + libMerged + ": " + std::string(dlerror())); return false; } loadedLibrary = libMerged; @@ -1629,14 +1629,14 @@ bool globalPreinit(const std::string &loTemplate) handle = dlopen(libSofficeapp.c_str(), RTLD_GLOBAL|RTLD_NOW); if (!handle) { - Log::error("Failed to load " + libSofficeapp + ": " + std::string(dlerror())); + Log::fatal("Failed to load " + libSofficeapp + ": " + std::string(dlerror())); return false; } loadedLibrary = libSofficeapp; } else { - Log::error("Neither " + libSofficeapp + " or " + libMerged + " exist."); + Log::fatal("Neither " + libSofficeapp + " or " + libMerged + " exist."); return false; } } @@ -1644,14 +1644,14 @@ bool globalPreinit(const std::string &loTemplate) LokHookPreInit* preInit = (LokHookPreInit *)dlsym(handle, "lok_preinit"); if (!preInit) { - Log::error("No lok_preinit symbol in " + loadedLibrary + ": " + std::string(dlerror())); + Log::fatal("No lok_preinit symbol in " + loadedLibrary + ": " + std::string(dlerror())); return false; } Log::trace("lok_preinit(" + loTemplate + "/program\", \"file:///user\")"); if (preInit((loTemplate + "/program").c_str(), "file:///user") != 0) { - Log::error("lok_preinit() in " + loadedLibrary + " failed"); + Log::fatal("lok_preinit() in " + loadedLibrary + " failed"); return false; } diff --git a/loolwsd/LOOLWSD.cpp b/loolwsd/LOOLWSD.cpp index 1b176eb..d801502 100644 --- a/loolwsd/LOOLWSD.cpp +++ b/loolwsd/LOOLWSD.cpp @@ -1417,7 +1417,7 @@ ServerSocket* getServerSocket(int nClientPortNumber) } catch (const Exception& exc) { - Log::error() << "Could not create server socket: " << exc.displayText() << Log::end; + Log::fatal() << "Could not create server socket: " << exc.displayText() << Log::end; return nullptr; } } @@ -1904,7 +1904,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) if (access(Cache.c_str(), R_OK | W_OK | X_OK) != 0) { - Log::syserror("Unable to access cache [" + Cache + + Log::sysfatal("Unable to access cache [" + Cache + "] please make sure it exists, and has write permission for this user."); return Application::EXIT_SOFTWARE; } @@ -1914,12 +1914,20 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) // child) separately now. Also check for options that are // meaningless for the parent. if (SysTemplate.empty()) + { + Log::fatal("Missing --systemplate option"); throw MissingOptionException("systemplate"); + } if (LoTemplate.empty()) + { + Log::fatal("Missing --lotemplate option"); throw MissingOptionException("lotemplate"); - + } if (ChildRoot.empty()) + { + Log::fatal("Missing --childroot option"); throw MissingOptionException("childroot"); + } else if (ChildRoot[ChildRoot.size() - 1] != '/') ChildRoot += '/'; @@ -1967,7 +1975,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) const Process::PID forKitPid = createForKit(); if (forKitPid < 0) { - Log::error("Failed to spawn loolforkit."); + Log::fatal("Failed to spawn loolforkit."); return Application::EXIT_SOFTWARE; } @@ -2039,7 +2047,7 @@ int LOOLWSD::main(const std::vector<std::string>& /*args*/) if (errno == ECHILD) { // No child processes. - Log::error("No Forkit instance. Terminating."); + Log::fatal("No Forkit instance. Terminating."); TerminationFlag = true; continue; } commit 0e047c8a1a397be1a6f48a64143f4cd101d6d2d2 Author: Tor Lillqvist <t...@collabora.com> Date: Fri Oct 14 12:47:48 2016 +0300 Add Log API for the 'FATAL' priority To be used only for truly fatal configuration or resource errors when the lool service cannot continue functioning at all. Add also a sysfatal() variant that appends the strerror(errno) message, like syserror(). diff --git a/loolwsd/Log.cpp b/loolwsd/Log.cpp index 9885d9f..e9b9576 100644 --- a/loolwsd/Log.cpp +++ b/loolwsd/Log.cpp @@ -186,6 +186,16 @@ namespace Log { logger().error(prefix("ERR") + msg + " (errno: " + std::string(std::strerror(errno)) + ")"); } + + void fatal(const std::string& msg) + { + logger().fatal(prefix("FTL") + msg); + } + + void sysfatal(const std::string& msg) + { + logger().fatal(prefix("FTL") + msg + " (errno: " + std::string(std::strerror(errno)) + ")"); + } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/loolwsd/Log.hpp b/loolwsd/Log.hpp index 76c5605..93724a2 100644 --- a/loolwsd/Log.hpp +++ b/loolwsd/Log.hpp @@ -32,6 +32,8 @@ namespace Log void warn(const std::string& msg); void error(const std::string& msg); void syserror(const std::string& msg); + void fatal(const std::string& msg); + void sysfatal(const std::string& msg); /// Signal safe prefix logging void signalLogPrefix(); @@ -105,6 +107,12 @@ namespace Log return StreamLogger([](const std::string& msg) { error(msg);}); } + inline + StreamLogger fatal() + { + return StreamLogger([](const std::string& msg) { fatal(msg);}); + } + template <typename U> StreamLogger& operator <<(StreamLogger& lhs, const U& rhs) { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits