From c261261e261acd5353fba88e4b6b52309d90fb80 Mon Sep 17 00:00:00 2001 From: Kyle Isom Date: Thu, 26 Feb 2026 13:25:57 -0800 Subject: [PATCH] Initialize ErrorHandler early and ensure immediate log file creation - Added early initialization of `ErrorHandler` in `main.cc` for robust error handling. - Modified `ErrorHandler` to create the log file immediately, ensuring its presence in the state directory. - Simplified conditional checks for log file operations and updated timestamp handling to use `system_clock`. --- ErrorHandler.cc | 19 +++++++------------ main.cc | 3 +++ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/ErrorHandler.cc b/ErrorHandler.cc index fb7e4f8..ebd0c1f 100644 --- a/ErrorHandler.cc +++ b/ErrorHandler.cc @@ -20,6 +20,8 @@ ErrorHandler::ErrorHandler() fs::create_directories(log_dir); } log_file_path_ = (log_dir / "error.log").string(); + // Create the log file immediately so it exists in the state directory + ensure_log_file(); } catch (...) { // If we can't create the directory, disable file logging file_logging_enabled_ = false; @@ -34,11 +36,7 @@ ErrorHandler::ErrorHandler() ErrorHandler::~ErrorHandler() { std::lock_guard lg(mtx_); - if (log_file_ &&log_file_ - -> - is_open() - ) - { + if (log_file_ && log_file_->is_open()) { log_file_->flush(); log_file_->close(); } @@ -249,11 +247,8 @@ void ErrorHandler::ensure_log_file() { // Must be called with mtx_ held - if (log_file_ &&log_file_ - -> - is_open() - ) - return; + if (log_file_ && log_file_->is_open()) + return; if (log_file_path_.empty()) return; @@ -313,6 +308,6 @@ std::uint64_t ErrorHandler::now_ns() { using namespace std::chrono; - return duration_cast(steady_clock::now().time_since_epoch()).count(); + return duration_cast(system_clock::now().time_since_epoch()).count(); } -} // namespace kte \ No newline at end of file +} // namespace kte diff --git a/main.cc b/main.cc index 792b222..d166711 100644 --- a/main.cc +++ b/main.cc @@ -117,6 +117,9 @@ main(int argc, char *argv[]) { std::setlocale(LC_ALL, ""); + // Ensure the error handler (and its log file) is initialised early. + kte::ErrorHandler::Instance(); + Editor editor; // CLI parsing using getopt_long