aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kernel/kernel/test_support/kapi/interrupts.cpp15
1 files changed, 12 insertions, 3 deletions
diff --git a/kernel/kernel/test_support/kapi/interrupts.cpp b/kernel/kernel/test_support/kapi/interrupts.cpp
index 79b03729..9bd3a515 100644
--- a/kernel/kernel/test_support/kapi/interrupts.cpp
+++ b/kernel/kernel/test_support/kapi/interrupts.cpp
@@ -1,23 +1,32 @@
#include <kapi/interrupts.hpp>
#include <atomic>
+#include <map>
+#include <thread>
namespace kapi::interrupts
{
namespace
{
- std::atomic_bool interrupt_state = false;
+ std::map<std::thread::id, std::atomic_flag> interrupt_state{};
}
auto enabled() -> bool
{
- return interrupt_state.load(std::memory_order::relaxed);
+ return interrupt_state[std::this_thread::get_id()].test();
}
auto enabled(bool value) -> void
{
- interrupt_state.store(value, std::memory_order::relaxed);
+ if (value)
+ {
+ interrupt_state[std::this_thread::get_id()].test_and_set(std::memory_order::relaxed);
+ }
+ else
+ {
+ interrupt_state[std::this_thread::get_id()].clear(std::memory_order::relaxed);
+ }
}
} // namespace kapi::interrupts \ No newline at end of file