From dd62966a5fbc502a0e8d91ca3a7de843f1800d99 Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Tue, 27 Oct 2009 17:41:58 +0000 Subject: Issue #7205: Fix a possible deadlock when using a BZ2File object from several threads at once. --- Modules/bz2module.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Modules/bz2module.c') diff --git a/Modules/bz2module.c b/Modules/bz2module.c index 045d7b270c..c3dae7a671 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) -- cgit v1.2.1