https://github.com/fcitx/fcitx5/commit/5b12bf216dda31c0f11eb85af54a43fce9d5a2ab Fix crashlog being inconsistent type in main/errorhandler. --- a/src/server/errorhandler.cpp +++ b/src/server/errorhandler.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include "fcitx-utils/fs.h" #include "fcitx-utils/standardpaths.h" #include "fcitx-utils/unixfd.h" @@ -31,15 +31,30 @@ #define MINIMAL_BUFFER_SIZE 256 #define BACKTRACE_SIZE 32 -extern int selfpipe[2]; -extern std::string crashlog; +namespace fcitx { + +static int signalPipe; +static std::filesystem::path crashlog; struct MinimalBuffer { char buffer[MINIMAL_BUFFER_SIZE]; int offset; }; -void SetMyExceptionHandler() { +static void OnException(int signo); + +void SetMyExceptionHandler(int pipeFd) { + + auto userDir = + StandardPaths::global().userDirectory(StandardPathsType::PkgConfig); + if (!userDir.empty()) { + if (fs::makePath(userDir)) { + crashlog = userDir / "crash.log"; + } + } + + signalPipe = pipeFd; + int signo; for (signo = SIGHUP; signo < SIGUNUSED; signo++) { @@ -115,7 +130,7 @@ static inline void _write_buffer(int fd, const MinimalBuffer *buffer) { void OnException(int signo) { if (signo == SIGCHLD) { uint8_t sig = (signo & 0xff); - fcitx::fs::safeWrite(selfpipe[1], &sig, 1); + fcitx::fs::safeWrite(signalPipe, &sig, 1); signal(signo, OnException); return; } @@ -180,10 +195,12 @@ void OnException(int signo) { if (signo < 0xff) { sig = (uint8_t)(signo & 0xff); } - fcitx::fs::safeWrite(selfpipe[1], &sig, 1); + fcitx::fs::safeWrite(signalPipe, &sig, 1); signal(signo, OnException); } break; } } +} // namespace fcitx + // kate: indent-mode cstyle; space-indent on; indent-width 0; --- a/src/server/errorhandler.h +++ b/src/server/errorhandler.h @@ -16,23 +16,15 @@ #ifndef SIGUNUSED #define SIGUNUSED 29 #endif -/* *********************************************************** -// Data structures -// *********************************************************** */ -/* *********************************************************** -// Functions -// *********************************************************** */ +namespace fcitx { // // Set Posix Signal Handler // // -void SetMyExceptionHandler(void); +void SetMyExceptionHandler(int pipeFd); -// -// Process Posix signal -// -void OnException(int signo); +} // namespace fcitx #endif --- a/src/server/main.cpp +++ b/src/server/main.cpp @@ -8,21 +8,17 @@ #include #include #include -#include #include #include #include #include -#include #include #include "fcitx-utils/environ.h" -#include "fcitx-utils/fs.h" #include "fcitx-utils/log.h" #include "fcitx-utils/misc.h" #include "fcitx-utils/misc_p.h" #include "fcitx-utils/standardpath.h" #include "fcitx-utils/standardpaths.h" -#include "fcitx-utils/stringutils.h" #include "fcitx/addonfactory.h" #include "fcitx/addoninstance.h" #include "fcitx/addonloader.h" @@ -31,8 +27,6 @@ #include "errorhandler.h" using namespace fcitx; -int selfpipe[2]; -std::filesystem::path crashlog; FCITX_DEFINE_STATIC_ADDON_REGISTRY(getStaticAddon) #ifdef ENABLE_KEYBOARD @@ -43,7 +37,8 @@ int main(int argc, char *argv[]) { umask(077); StandardPath::global().syncUmask(); StandardPaths::global().syncUmask(); - if (safePipe(selfpipe) < 0) { + int selfPipe[2]; + if (safePipe(selfPipe) < 0) { fprintf(stderr, "Could not create self-pipe.\n"); return 1; } @@ -54,15 +49,7 @@ int main(int argc, char *argv[]) { return 1; } - auto userDir = - StandardPaths::global().userDirectory(StandardPathsType::PkgConfig); - if (!userDir.empty()) { - if (fs::makePath(userDir)) { - crashlog = userDir / "crash.log"; - } - } - - SetMyExceptionHandler(); + SetMyExceptionHandler(selfPipe[1]); setlocale(LC_ALL, ""); @@ -74,7 +61,7 @@ int main(int argc, char *argv[]) { FCITX_LOG_IF(Info, isInFlatpak()) << "Running inside flatpak."; Instance instance(argc, argv); instance.setBinaryMode(); - instance.setSignalPipe(selfpipe[0]); + instance.setSignalPipe(selfPipe[0]); instance.addonManager().registerDefaultLoader(&getStaticAddon()); ret = instance.exec();