diff options
author | Timon Kruiper <timonkruiper@gmail.com> | 2022-10-25 22:17:57 +0200 |
---|---|---|
committer | Andrew Kaster <andrewdkaster@gmail.com> | 2022-12-29 19:32:20 -0700 |
commit | b18a7297c58a97fcfe501f7df0fb628125884278 (patch) | |
tree | cbe0ceb2a2ba3812f9857472ba58cf762cb1198c /Kernel/ScopedCritical.cpp | |
parent | 496a3cdcd300417e24bd520a0e0e603219544a22 (diff) | |
download | serenity-b18a7297c58a97fcfe501f7df0fb628125884278.zip |
Kernel: Move ScopedCritical.cpp to Kernel base directory
This file does not contain any architecture specific implementations,
so we can move it to the Kernel base directory. Also update the relevant
include paths.
Diffstat (limited to 'Kernel/ScopedCritical.cpp')
-rw-r--r-- | Kernel/ScopedCritical.cpp | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/Kernel/ScopedCritical.cpp b/Kernel/ScopedCritical.cpp new file mode 100644 index 0000000000..c97478c6d5 --- /dev/null +++ b/Kernel/ScopedCritical.cpp @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2018-2021, Andreas Kling <kling@serenityos.org> + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include <Kernel/ScopedCritical.h> + +#include <Kernel/Arch/Processor.h> + +namespace Kernel { + +ScopedCritical::ScopedCritical() +{ + enter(); +} + +ScopedCritical::~ScopedCritical() +{ + if (m_valid) + leave(); +} + +ScopedCritical::ScopedCritical(ScopedCritical&& from) + : m_valid(exchange(from.m_valid, false)) +{ +} + +ScopedCritical& ScopedCritical::operator=(ScopedCritical&& from) +{ + if (&from != this) { + m_valid = exchange(from.m_valid, false); + } + return *this; +} + +void ScopedCritical::leave() +{ + VERIFY(m_valid); + m_valid = false; + Processor::leave_critical(); +} + +void ScopedCritical::enter() +{ + VERIFY(!m_valid); + m_valid = true; + Processor::enter_critical(); +} + +} |