diff --git a/Kernel/Process.h b/Kernel/Process.h index 1043901d34..affd3d9a2e 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -237,6 +237,7 @@ public: IterationDecision for_each_thread(Callback); template Callback> IterationDecision for_each_thread(Callback callback) const; + ErrorOr try_for_each_thread(Function(Thread const&)>) const; // Non-breakable iteration functions template Callback> @@ -939,6 +940,15 @@ inline IterationDecision Process::for_each_thread(Callback callback) const return IterationDecision::Continue; } +inline ErrorOr Process::try_for_each_thread(Function(Thread const&)> callback) const +{ + return thread_list().with([&](auto& thread_list) -> ErrorOr { + for (auto& thread : thread_list) + TRY(callback(thread)); + return {}; + }); +} + template Callback> inline IterationDecision Process::for_each_thread(Callback callback) {