diff options
| author | Felix Morgner <felix.morgner@ost.ch> | 2026-07-27 00:08:49 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@ost.ch> | 2026-07-27 00:08:49 +0200 |
| commit | 12002c540c9de2342d829c5b073c65cfb4549b35 (patch) | |
| tree | f401f5a5d785170bc13312ac04780e421cc465f5 /kernel/kapi/devices/driver_registry.cpp | |
| parent | 724e7698dc2795cf96f07ba16a078abd4e93cb46 (diff) | |
| download | kernel-12002c540c9de2342d829c5b073c65cfb4549b35.tar.xz kernel-12002c540c9de2342d829c5b073c65cfb4549b35.zip | |
kapi: fix driver registry locking
Diffstat (limited to 'kernel/kapi/devices/driver_registry.cpp')
| -rw-r--r-- | kernel/kapi/devices/driver_registry.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/kernel/kapi/devices/driver_registry.cpp b/kernel/kapi/devices/driver_registry.cpp index 842dbc1d..7abb121f 100644 --- a/kernel/kapi/devices/driver_registry.cpp +++ b/kernel/kapi/devices/driver_registry.cpp @@ -9,6 +9,7 @@ #include <kapi/test_support/devices.hpp> #include <kstd/memory.hpp> +#include <kstd/mutex.hpp> #include <kstd/print.hpp> #include <kstd/system_error.hpp> #include <kstd/vector.hpp> @@ -55,7 +56,10 @@ namespace kapi::devices auto driver_registry::add(kstd::shared_ptr<driver> driver) -> void { - m_drivers.emplace_back(std::move(driver)); + { + auto guard = kstd::lock_guard{m_lock}; + m_drivers.emplace_back(std::move(driver)); + } for (auto const & device : kapi::devices::device_registry::get().all()) { @@ -85,9 +89,15 @@ namespace kapi::devices return; } + auto drivers = kstd::vector<kstd::shared_ptr<driver>>{}; + { + auto guard = kstd::lock_guard{m_lock}; + drivers = m_drivers; + } + auto candidates = kstd::vector<candidate>{}; - for (auto const & driver : m_drivers) + for (auto const & driver : drivers) { auto match = protocol->match(*device, *driver); if (match) |
