From ed9a502a9aba6ff9d5d8f6df6b0c2d128d67b87a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Mon, 8 Jul 2019 21:22:48 +0200 Subject: [PATCH] console: allow one user at a time. Fixes #15142. Change-Id: I203cb62a6640fcd5f674eeaf4aa1145e1e831ca6 Reviewed-on: https://review.haiku-os.org/c/1566 Reviewed-by: waddlesplash --- src/add-ons/kernel/drivers/common/console.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/add-ons/kernel/drivers/common/console.cpp b/src/add-ons/kernel/drivers/common/console.cpp index 5a7cde1fe9..9c55dd7e06 100644 --- a/src/add-ons/kernel/drivers/common/console.cpp +++ b/src/add-ons/kernel/drivers/common/console.cpp @@ -78,6 +78,8 @@ static struct console_desc { int32 api_version = B_CUR_DRIVER_API_VERSION; +static int32 sOpenMask; + static inline void update_cursor(struct console_desc *console, int x, int y) @@ -659,6 +661,9 @@ _console_write(struct console_desc *console, const void *buffer, size_t length) static status_t console_open(const char *name, uint32 flags, void **cookie) { + if (atomic_or(&sOpenMask, 1) == 1) + return B_BUSY; + *cookie = &sConsole; status_t status = get_module(sConsole.module_name, (module_info **)&sConsole.module); @@ -677,6 +682,8 @@ console_freecookie(void *cookie) sConsole.module = NULL; } + atomic_and(&sOpenMask, ~1); + return B_OK; }