diff --git a/src/system/kernel/team.c b/src/system/kernel/team.c index 6c31b9ba1b..a6d28b66f4 100644 --- a/src/system/kernel/team.c +++ b/src/system/kernel/team.c @@ -745,6 +745,14 @@ delete_team_struct(struct team *team) void team_remove_team(struct team *team, struct process_group **_freeGroup) { + struct team *parent = team->parent; + + // remember how long this team lasted + parent->dead_children.kernel_time += team->dead_threads_kernel_time + + team->dead_children.kernel_time; + parent->dead_children.user_time += team->dead_threads_user_time + + team->dead_children.user_time; + hash_remove(team_hash, team); sUsedTeams--; @@ -756,8 +764,8 @@ team_remove_team(struct team *team, struct process_group **_freeGroup) // remove us from our process group remove_team_from_group(team, _freeGroup); - // remove us from our parent - remove_team_from_parent(team->parent, team); + // remove us from our parent + remove_team_from_parent(parent, team); } diff --git a/src/system/kernel/thread.c b/src/system/kernel/thread.c index a7ee5e2790..0c9b12f5f5 100644 --- a/src/system/kernel/thread.c +++ b/src/system/kernel/thread.c @@ -945,10 +945,6 @@ thread_exit(void) groupDeadSem = team->group->dead_child_sem; } - // remember how long this team lasted - parent->dead_children.kernel_time += team->dead_threads_kernel_time; - parent->dead_children.user_time += team->dead_threads_user_time; - team_remove_team(team, &freeGroup); } RELEASE_TEAM_LOCK();