diff options
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) |
