diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-10-27 17:47:14 (GMT) |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-10-27 17:47:14 (GMT) |
commit | c66363f5e0c38aeeeeb706cf0fa93fa1e63f53ee (patch) | |
tree | c384e3f018e105d6910b05d6269173b68281b4c1 /Modules | |
parent | 495f7b5adbe798447f12139ce7f870b7b4c06a6c (diff) | |
download | cpython-c66363f5e0c38aeeeeb706cf0fa93fa1e63f53ee.zip cpython-c66363f5e0c38aeeeeb706cf0fa93fa1e63f53ee.tar.gz cpython-c66363f5e0c38aeeeeb706cf0fa93fa1e63f53ee.tar.bz2 |
Merged revisions 75818 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk
........
r75818 | antoine.pitrou | 2009-10-27 18:41:58 +0100 (mar., 27 oct. 2009) | 3 lines
Issue #7205: Fix a possible deadlock when using a BZ2File object from several threads at once.
........
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/bz2module.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/Modules/bz2module.c b/Modules/bz2module.c index 5f1d01b..550f1cf 100644 --- a/Modules/bz2module.c +++ b/Modules/bz2module.c @@ -78,7 +78,12 @@ typedef fpos_t Py_off_t; #ifdef WITH_THREAD -#define ACQUIRE_LOCK(obj) PyThread_acquire_lock(obj->lock, 1) +#define ACQUIRE_LOCK(obj) do { \ + if (!PyThread_acquire_lock(obj->lock, 0)) { \ + Py_BEGIN_ALLOW_THREADS \ + PyThread_acquire_lock(obj->lock, 1); \ + Py_END_ALLOW_THREADS \ + } } while(0) #define RELEASE_LOCK(obj) PyThread_release_lock(obj->lock) #else #define ACQUIRE_LOCK(obj) |