Author: bonefish Date: 2011-01-11 20:43:57 +0100 (Tue, 11 Jan 2011) New Revision: 40208 Changeset: http://dev.haiku-os.org/changeset/40208 Modified: haiku/branches/developer/bonefish/signals/headers/private/kernel/thread_types.h haiku/branches/developer/bonefish/signals/src/system/kernel/team.cpp Log: Added locking to Team. Doesn't protect anything yet. Modified: haiku/branches/developer/bonefish/signals/headers/private/kernel/thread_types.h =================================================================== --- haiku/branches/developer/bonefish/signals/headers/private/kernel/thread_types.h 2011-01-11 19:34:05 UTC (rev 40207) +++ haiku/branches/developer/bonefish/signals/headers/private/kernel/thread_types.h 2011-01-11 19:43:57 UTC (rev 40208) @@ -297,10 +297,18 @@ static Team* Create(const char* name, bool kernel); static Team* Get(team_id id); + bool Lock() + { mutex_lock(&fLock); return true; } + void Unlock() + { mutex_unlock(&fLock); } + void SetName(const char* name); private: - Team(team_id teamID); + Team(bool kernel); + +private: + mutex fLock; }; Modified: haiku/branches/developer/bonefish/signals/src/system/kernel/team.cpp =================================================================== --- haiku/branches/developer/bonefish/signals/src/system/kernel/team.cpp 2011-01-11 19:34:05 UTC (rev 40207) +++ haiku/branches/developer/bonefish/signals/src/system/kernel/team.cpp 2011-01-11 19:43:57 UTC (rev 40208) @@ -530,10 +530,21 @@ // #pragma mark - Team -Team::Team(team_id teamID) +Team::Team(bool kernel) { + // allocate an ID + id = kernel ? 1 : allocate_thread_id(); + + // init mutex + if (kernel) { + mutex_init(&fLock, "Team:kernel"); + } else { + char lockName[16]; + snprintf(lockName, sizeof(lockName), "Team:%" B_PRId32, id); + mutex_init_etc(&fLock, lockName, MUTEX_FLAG_CLONE_NAME); + } + next = siblings_next = children = parent = NULL; - id = teamID; name[0] = '\0'; args[0] = '\0'; num_threads = 0; @@ -610,6 +621,8 @@ delete job_control_entry; // usually already NULL and transferred to the parent + + mutex_destroy(&fLock); } @@ -617,7 +630,7 @@ Team::Create(const char* name, bool kernel) { // create the team object - Team* team = new(std::nothrow) Team(kernel ? 1 : allocate_thread_id()); + Team* team = new(std::nothrow) Team(kernel); if (team == NULL) return NULL; ObjectDeleter<Team> teamDeleter(team);