--- nono/lib/logger.cpp 2026/04/29 17:04:28 1.1.1.1 +++ nono/lib/logger.cpp 2026/04/29 17:04:51 1.1.1.4 @@ -1,13 +1,14 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // -#include "header.h" #include "logger.h" #include "mpu.h" -Logger *gLogger; +// グローバルインスタンス +Logger gLogger; // コンストラクタ Logger::Logger() @@ -26,14 +27,16 @@ Logger::Write(const char *str) std::unique_lock lk(mtx); // パイプへ出力 (EOL まで出力する) for (const char *s = str; ; s++) { - // 一杯なら古いのを捨てて書き込み続ける - if (pipe.Enqueue(*s) == false) { - uint8 dummy; - pipe.Dequeue(&dummy); - pipe.Enqueue(*s); + if (pipe.IsFull()) { + // 一杯なら古い 1 行を捨てる + while (pipe.Dequeue() != '\0') { + // nop + } } - if (*s == '\0') + pipe.Enqueue(*s); + if (*s == '\0') { break; + } } // 必要なら標準出力にも出力 if (use_stdout) { @@ -67,13 +70,6 @@ Logger::Read(char *buf, int bufsize) } -// ログ初期化 -void -logger_init() -{ - gLogger = new Logger(); -} - // パニック void panic(const char *funcname, const char *fmt, ...) @@ -87,6 +83,6 @@ panic(const char *funcname, const char * // panic の場合ここでプロセス終了するのでログではなく stderr に出力 fprintf(stderr, "panic! PC=$%08x %s at %s\n", - gMPU->GetCPU()->ppc, fmtbuf, funcname); + gMPU->GetPPC(), fmtbuf, funcname); abort(); }