aboutsummaryrefslogtreecommitdiff
path: root/kernel/kapi/devices/driver_registry.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kapi/devices/driver_registry.cpp')
-rw-r--r--kernel/kapi/devices/driver_registry.cpp14
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)