From a90e9ba7b9cd11c9996cf38a844a02269854204f Mon Sep 17 00:00:00 2001 From: Augustin Cavalier Date: Thu, 4 Jul 2019 16:47:36 -0400 Subject: [PATCH] kernel/team: Create a team_get_team_struct() function and utilize it. Cleans up some lock/get/unlock sequences, and makes it possible for external consumers to get team structs (which will be necessary for permissions checks.) --- headers/private/kernel/team.h | 1 + src/system/kernel/team.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/headers/private/kernel/team.h b/headers/private/kernel/team.h index e376409f75..87bbab6e67 100644 --- a/headers/private/kernel/team.h +++ b/headers/private/kernel/team.h @@ -38,6 +38,7 @@ struct job_control_entry* team_get_death_entry(Team *team, thread_id child, bool* _deleteEntry); void team_init_exit_info_on_error(Team* team); bool team_is_valid(team_id id); +Team *team_get_team_struct(team_id id); Team *team_get_team_struct_locked(team_id id); int32 team_max_teams(void); int32 team_used_teams(void); diff --git a/src/system/kernel/team.cpp b/src/system/kernel/team.cpp index 15cb73f653..a3fb03b484 100644 --- a/src/system/kernel/team.cpp +++ b/src/system/kernel/team.cpp @@ -2918,9 +2918,15 @@ team_is_valid(team_id id) if (id <= 0) return false; - InterruptsReadSpinLocker teamsLocker(sTeamHashLock); + return team_get_team_struct(id) != NULL; +} - return team_get_team_struct_locked(id) != NULL; + +Team* +team_get_team_struct(team_id id) +{ + InterruptsReadSpinLocker teamsLocker(sTeamHashLock); + return team_get_team_struct_locked(id); }