summaryrefslogtreecommitdiffstats
path: root/Python
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2003-04-18 11:11:09 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2003-04-18 11:11:09 (GMT)
commit1509a152b37c04022b006ce1674f7c78453c388b (patch)
tree12a3a31845b0e04231ba2aa04944f3bfbb11f385 /Python
parent69206528231d5d07565cbbabc0c030046d654f54 (diff)
downloadcpython-1509a152b37c04022b006ce1674f7c78453c388b.zip
cpython-1509a152b37c04022b006ce1674f7c78453c388b.tar.gz
cpython-1509a152b37c04022b006ce1674f7c78453c388b.tar.bz2
Patch #711835: Remove unnecessary lock operations. Will backport to 2.2.
Diffstat (limited to 'Python')
-rw-r--r--Python/thread_pthread.h12
1 files changed, 4 insertions, 8 deletions
diff --git a/Python/thread_pthread.h b/Python/thread_pthread.h
index e30982f..2596af5 100644
--- a/Python/thread_pthread.h
+++ b/Python/thread_pthread.h
@@ -497,27 +497,23 @@ PyThread_acquire_lock(PyThread_type_lock lock, int waitflag)
status = pthread_mutex_lock( &thelock->mut );
CHECK_STATUS("pthread_mutex_lock[1]");
success = thelock->locked == 0;
- if (success) thelock->locked = 1;
- status = pthread_mutex_unlock( &thelock->mut );
- CHECK_STATUS("pthread_mutex_unlock[1]");
if ( !success && waitflag ) {
/* continue trying until we get the lock */
/* mut must be locked by me -- part of the condition
* protocol */
- status = pthread_mutex_lock( &thelock->mut );
- CHECK_STATUS("pthread_mutex_lock[2]");
while ( thelock->locked ) {
status = pthread_cond_wait(&thelock->lock_released,
&thelock->mut);
CHECK_STATUS("pthread_cond_wait");
}
- thelock->locked = 1;
- status = pthread_mutex_unlock( &thelock->mut );
- CHECK_STATUS("pthread_mutex_unlock[2]");
success = 1;
}
+ if (success) thelock->locked = 1;
+ status = pthread_mutex_unlock( &thelock->mut );
+ CHECK_STATUS("pthread_mutex_unlock[1]");
+
if (error) success = 0;
dprintf(("PyThread_acquire_lock(%p, %d) -> %d\n", lock, waitflag, success));
return success;