From 4e859bedbc6f5c77b859391df4aacda5de09c9aa Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 30 Apr 2023 16:11:14 +0300 Subject: [PATCH] Kernel: TTY input process is now single instance Process sends key events to the active (currently only) tty --- kernel/kernel/Terminal/TTY.cpp | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/kernel/kernel/Terminal/TTY.cpp b/kernel/kernel/Terminal/TTY.cpp index 74ac9c28a..e99c67bb2 100644 --- a/kernel/kernel/Terminal/TTY.cpp +++ b/kernel/kernel/Terminal/TTY.cpp @@ -22,6 +22,8 @@ namespace Kernel { + static Process* s_input_process = nullptr; + static dev_t next_tty_rdev() { static dev_t major = DeviceManager::get().get_next_rdev(); @@ -55,18 +57,19 @@ namespace Kernel m_name = BAN::String::formatted("tty{}", minor(m_rdev)); DeviceManager::get().add_device(this); - Process::create_kernel( - [](void* tty_) + if (s_input_process) + return; + s_input_process = Process::create_kernel( + [](void*) { - TTY* tty = (TTY*)tty_; int fd = MUST(Process::current().open("/dev/input0"sv, O_RDONLY)); while (true) { Input::KeyEvent event; - MUST(Process::current().read(fd, &event, sizeof(event))); - tty->on_key(event); + ASSERT(MUST(Process::current().read(fd, &event, sizeof(event))) == sizeof(event)); + TTY::current()->on_key(event); } - }, this + }, nullptr ); }