aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi/interrupts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kapi/interrupts.cpp')
-rw-r--r--kernel/kapi/interrupts.cpp11
1 files changed, 6 insertions, 5 deletions
diff --git a/kernel/kapi/interrupts.cpp b/kernel/kapi/interrupts.cpp
index c5925058..a1bcba93 100644
--- a/kernel/kapi/interrupts.cpp
+++ b/kernel/kapi/interrupts.cpp
@@ -14,7 +14,8 @@ namespace kapi::interrupts
namespace
{
- auto constinit handlers = kstd::flat_map<std::uint32_t, kstd::vector<std::pair<handler *, kstd::weak_ptr<void>>>>{};
+ auto constinit handlers =
+ kstd::flat_map<std::uint32_t, kstd::vector<std::pair<kstd::observer_ptr<handler>, kstd::weak_ptr<void>>>>{};
} // namespace
auto register_handler(std::uint32_t irq_number, handler & handler, kstd::weak_ptr<void> context) -> void
@@ -22,12 +23,12 @@ namespace kapi::interrupts
if (handlers.contains(irq_number))
{
auto & handler_list = handlers.at(irq_number);
- handler_list.push_back(std::pair{&handler, context});
+ handler_list.push_back(std::pair{kstd::make_observer(&handler), context});
}
else
{
handlers.emplace(irq_number, kstd::vector{
- std::pair{&handler, context}
+ std::pair{kstd::make_observer(&handler), context}
});
}
}
@@ -35,8 +36,8 @@ namespace kapi::interrupts
auto unregister_handler(std::uint32_t irq_number, handler & handler) -> void
{
auto & handler_list = handlers.at(irq_number);
- auto [first, last] =
- std::ranges::remove_if(handler_list, [&](auto const & entry) { return entry.first == &handler; });
+ auto [first, last] = std::ranges::remove_if(
+ handler_list, [&](auto const & entry) { return entry.first == kstd::make_observer(&handler); });
handler_list.erase(first, last);
}