From 156f457e28d230b7f32db3750d830b86dbeeaf4b Mon Sep 17 00:00:00 2001 From: Ayush Ranjan Date: Wed, 5 Mar 2025 22:20:03 -0800 Subject: [PATCH] Add kernel.ThreadGroup.ForEachTask(). PiperOrigin-RevId: 733991896 --- pkg/sentry/kernel/threads.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/pkg/sentry/kernel/threads.go b/pkg/sentry/kernel/threads.go index 92276fecc..01a98206b 100644 --- a/pkg/sentry/kernel/threads.go +++ b/pkg/sentry/kernel/threads.go @@ -478,6 +478,17 @@ func (tg *ThreadGroup) MemberIDs(pidns *PIDNamespace) []ThreadID { return tasks } +// ForEachTask invokes f() on each task in tg. +func (tg *ThreadGroup) ForEachTask(f func(t *Task) bool) { + tg.pidns.owner.mu.RLock() + defer tg.pidns.owner.mu.RUnlock() + for t := tg.tasks.Front(); t != nil; t = t.Next() { + if !f(t) { + break + } + } +} + // ID returns tg's leader's thread ID in its own PID namespace. // If tg's leader is dead, ID returns 0. func (tg *ThreadGroup) ID() ThreadID {