diff options
author | wtchang%redhat.com <devnull@localhost> | 2005-02-23 17:49:14 +0000 |
---|---|---|
committer | wtchang%redhat.com <devnull@localhost> | 2005-02-23 17:49:14 +0000 |
commit | 515787a9940ffabc4ae00795dfb536c2ce85bddb (patch) | |
tree | dab8143bb5d0c5b7e2f8d0df73f69ecb63974675 | |
parent | 0191ac2e5e8d0990f73a0ab6ddf8cc6396ffffa3 (diff) | |
download | nspr-hg-515787a9940ffabc4ae00795dfb536c2ce85bddb.tar.gz |
Bugzilla Bug 283210: Use the B_DO_NOT_RESCHEDULE flag to avoid unnecessary
context switches when a lock is released. The patch is contributed by
tqh <thesuckiestemail@yahoo.se>. r=sergei_d,wtc.
Modified Files: btcvar.c btlocks.c btsem.c
Tag: NSPRPUB_PRE_4_2_CLIENT_BRANCH
-rw-r--r-- | pr/src/bthreads/btcvar.c | 18 | ||||
-rw-r--r-- | pr/src/bthreads/btlocks.c | 2 | ||||
-rw-r--r-- | pr/src/bthreads/btsem.c | 2 |
3 files changed, 11 insertions, 11 deletions
diff --git a/pr/src/bthreads/btcvar.c b/pr/src/bthreads/btcvar.c index 841ec960..f615bf5b 100644 --- a/pr/src/bthreads/btcvar.c +++ b/pr/src/bthreads/btcvar.c @@ -141,7 +141,7 @@ PR_IMPLEMENT(PRStatus) cvar->nw += 1; if( atomic_add( &cvar->signalBenCount, -1 ) > 1 ) { - release_sem(cvar->signalSem); + release_sem_etc(cvar->signalSem, 1, B_DO_NOT_RESCHEDULE); } PR_Unlock( cvar->lock ); @@ -161,13 +161,13 @@ PR_IMPLEMENT(PRStatus) if (cvar->ns > 0) { - release_sem(cvar->handshakeSem); + release_sem_etc(cvar->handshakeSem, 1, B_DO_NOT_RESCHEDULE); cvar->ns -= 1; } cvar->nw -= 1; if( atomic_add( &cvar->signalBenCount, -1 ) > 1 ) { - release_sem(cvar->signalSem); + release_sem_etc(cvar->signalSem, 1, B_DO_NOT_RESCHEDULE); } PR_Lock( cvar->lock ); @@ -206,10 +206,10 @@ PR_IMPLEMENT(PRStatus) if (cvar->nw > cvar->ns) { cvar->ns += 1; - release_sem(cvar->sem); + release_sem_etc(cvar->sem, 1, B_DO_NOT_RESCHEDULE); if( atomic_add( &cvar->signalBenCount, -1 ) > 1 ) { - release_sem(cvar->signalSem); + release_sem_etc(cvar->signalSem, 1, B_DO_NOT_RESCHEDULE); } while (acquire_sem(cvar->handshakeSem) == B_INTERRUPTED) @@ -221,7 +221,7 @@ PR_IMPLEMENT(PRStatus) { if( atomic_add( &cvar->signalBenCount, -1 ) > 1 ) { - release_sem(cvar->signalSem); + release_sem_etc(cvar->signalSem, 1, B_DO_NOT_RESCHEDULE); } } return PR_SUCCESS; @@ -254,10 +254,10 @@ PR_IMPLEMENT(PRStatus) { handshakes = cvar->nw - cvar->ns; cvar->ns = cvar->nw; - release_sem_etc(cvar->sem, handshakes, 0); + release_sem_etc(cvar->sem, handshakes, B_DO_NOT_RESCHEDULE); if( atomic_add( &cvar->signalBenCount, -1 ) > 1 ) { - release_sem(cvar->signalSem); + release_sem_etc(cvar->signalSem, 1, B_DO_NOT_RESCHEDULE); } while (acquire_sem_etc(cvar->handshakeSem, handshakes, 0, 0) == B_INTERRUPTED) @@ -269,7 +269,7 @@ PR_IMPLEMENT(PRStatus) { if( atomic_add( &cvar->signalBenCount, -1 ) > 1 ) { - release_sem(cvar->signalSem); + release_sem_etc(cvar->signalSem, 1, B_DO_NOT_RESCHEDULE); } } return PR_SUCCESS; diff --git a/pr/src/bthreads/btlocks.c b/pr/src/bthreads/btlocks.c index c5b62860..bf8bfd47 100644 --- a/pr/src/bthreads/btlocks.c +++ b/pr/src/bthreads/btlocks.c @@ -109,7 +109,7 @@ PR_IMPLEMENT(PRStatus) lock->owner = NULL; if( atomic_add( &lock->benaphoreCount, -1 ) > 1 ) { - release_sem( lock->semaphoreID ); + release_sem_etc( lock->semaphoreID, 1, B_DO_NOT_RESCHEDULE ); } return PR_SUCCESS; diff --git a/pr/src/bthreads/btsem.c b/pr/src/bthreads/btsem.c index c9f2e641..bce28142 100644 --- a/pr/src/bthreads/btsem.c +++ b/pr/src/bthreads/btsem.c @@ -109,7 +109,7 @@ PR_IMPLEMENT(void) status_t result; PR_ASSERT(sem != NULL); - result = release_sem(sem->sem); + result = release_sem_etc(sem->sem, 1, B_DO_NOT_RESCHEDULE); PR_ASSERT(result == B_NO_ERROR); } |