--- nono/host/hostcom.cpp 2026/04/29 17:05:47 1.1.1.8 +++ nono/host/hostcom.cpp 2026/04/29 17:05:56 1.1.1.10 @@ -117,7 +117,7 @@ HostCOMDevice::SetLogLevel(int loglevel_ { inherited::SetLogLevel(loglevel_); - std::lock_guard guard(driverlock); + RWLockGuard_Read guard(driverlock); if ((bool)driver) { driver->SetLogLevel(loglevel_); } @@ -131,18 +131,6 @@ HostCOMDevice::Create2() return false; } - // hostcom*-fallback は使わなくなったので、 - // 初期値から変更されていれば警告だけ出す。 - std::string key = GetConfigKey(); - if (key != "debugger") { - const std::string fallback_key = key + "-fallback"; - const ConfigItem& fallback_item = gConfig->Find(fallback_key); - if (fallback_item.GetFrom() != ConfigItem::FromInitial) { - warnx("Warning: option '%s' has been obsoleted.", - fallback_key.c_str()); - } - } - if (SelectDriver(true) == false) { return false; } @@ -158,7 +146,7 @@ HostCOMDevice::Create2() bool HostCOMDevice::SelectDriver(bool startup) { - std::lock_guard guard(driverlock); + RWLockGuard_Write guard(driverlock); driver.reset(); errmsg.clear(); @@ -210,7 +198,7 @@ HostCOMDevice::SelectDriver(bool startup } else { // UI に通知してフォールバック。 int n = (key == "debugger") ? -1 : GetId() - OBJ_HOSTCOM0; - UIMessage::Post(UIMessage::HOSTCOM_FAILED, n); + gMainApp.GetUIMessage()->Post(UIMessage::HOSTCOM_FAILED, n); CreateNone(); } @@ -310,7 +298,7 @@ HostCOMDevice::Dispatch(int udata) { // driver の Dispatch は処理し終わったら DONE を返す { - std::lock_guard guard(driverlock); + RWLockGuard_Read guard(driverlock); udata = driver->Dispatch(udata); } @@ -385,7 +373,7 @@ HostCOMDevice::Rx() int HostCOMDevice::Read() { - std::lock_guard guard(driverlock); + RWLockGuard_Read guard(driverlock); assert((bool)driver); int data = driver->Read(); @@ -411,7 +399,7 @@ HostCOMDevice::Write() { uint8 data; - std::lock_guard guard(driverlock); + RWLockGuard_Read guard(driverlock); assert(driver); // 送信キューを全部吐き出す @@ -422,10 +410,10 @@ HostCOMDevice::Write() } // ドライバ名を返す -const std::string +const std::string& HostCOMDevice::GetDriverName() { - std::lock_guard guard(driverlock); + RWLockGuard_Read guard(driverlock); assert((bool)driver); return driver->GetDriverName(); } @@ -438,8 +426,9 @@ HostCOMDevice::MonitorUpdate(Monitor *, screen.Print(0, 0, "Device(Port) : %s", GetPortName().c_str()); { - std::lock_guard guard(driverlock); - screen.Print(0, 1, "HostCOM Driver: %s", driver->GetDriverName()); + RWLockGuard_Read gurad(driverlock); + screen.Print(0, 1, "HostCOM Driver: %s", + driver->GetDriverName().c_str()); // 次の1行はドライバ依存情報 driver->MonitorUpdateMD(screen, 2); }