kernel: Change Thread::team_lock to rw_spinlock

This commit is contained in:
Pawel Dziepak
2013-11-07 04:20:59 +01:00
parent defee266db
commit 3519eb334a
4 changed files with 6 additions and 6 deletions
+1 -1
View File
@@ -483,7 +483,7 @@ struct Thread : TeamThreadIteratorEntry<thread_id>, KernelReferenceable,
BKernel::Team *team; // protected by team lock, thread lock, scheduler
// lock, team_lock
spinlock team_lock;
rw_spinlock team_lock;
struct {
sem_id sem; // immutable after thread creation
+1 -1
View File
@@ -169,7 +169,7 @@ ThreadSignalEvent::Fire()
fSignal->AcquireReference();
// one reference is transferred to send_signal_to_team_locked
InterruptsSpinLocker teamLocker(fThread->team_lock);
InterruptsReadSpinLocker teamLocker(fThread->team_lock);
SpinLocker locker(fThread->team->signal_lock);
status_t error = send_signal_to_thread_locked(fThread, fSignal->Number(),
fSignal, B_DO_NOT_RESCHEDULE);
+1 -1
View File
@@ -1494,7 +1494,7 @@ send_signal_to_thread(Thread* thread, const Signal& signal, uint32 flags)
if (error != B_OK)
return error;
InterruptsSpinLocker teamLocker(thread->team_lock);
InterruptsReadSpinLocker teamLocker(thread->team_lock);
SpinLocker locker(thread->team->signal_lock);
error = send_signal_to_thread_locked(thread, signal.Number(), signalToQueue,
+3 -3
View File
@@ -206,7 +206,7 @@ Thread::Thread(const char* name, thread_id threadID, struct cpu_ent* cpu)
mutex_init_etc(&fLock, lockName, MUTEX_FLAG_CLONE_NAME);
B_INITIALIZE_SPINLOCK(&time_lock);
B_INITIALIZE_SPINLOCK(&team_lock);
B_INITIALIZE_RW_SPINLOCK(&team_lock);
// init name
if (name != NULL)
@@ -1984,7 +1984,7 @@ thread_exit(void)
// swap address spaces, to make sure we're running on the kernel's pgdir
vm_swap_address_space(team->address_space, VMAddressSpace::Kernel());
SpinLocker teamLocker(thread->team_lock);
WriteSpinLocker teamLocker(thread->team_lock);
SpinLocker schedulerLocker(gSchedulerLock);
// removing the thread and putting its death entry to the parent
// team needs to be an atomic operation
@@ -3281,7 +3281,7 @@ _user_cancel_thread(thread_id threadID, void (*cancelFunction)(int))
thread->cancel_function = cancelFunction;
// send the cancellation signal to the thread
InterruptsSpinLocker teamLocker(thread->team_lock);
InterruptsReadSpinLocker teamLocker(thread->team_lock);
SpinLocker locker(thread->team->signal_lock);
return send_signal_to_thread_locked(thread, SIGNAL_CANCEL_THREAD, NULL, 0);
}