diff options
author | Benjamin Peterson <benjamin@python.org> | 2014-06-17 06:08:29 (GMT) |
---|---|---|
committer | Benjamin Peterson <benjamin@python.org> | 2014-06-17 06:08:29 (GMT) |
commit | 7258e6da3bc7e7c6bc47b6cf6f40f32849006db7 (patch) | |
tree | b5231202b5ddd2fdb6b073d720111dcf87c9a4ec /Python | |
parent | e6bfdb9ca592382fc0a2f976dcf6d290f364220d (diff) | |
parent | 068f81e11528b367f56bc3922554fa2dd00a7071 (diff) | |
download | cpython-7258e6da3bc7e7c6bc47b6cf6f40f32849006db7.zip cpython-7258e6da3bc7e7c6bc47b6cf6f40f32849006db7.tar.gz cpython-7258e6da3bc7e7c6bc47b6cf6f40f32849006db7.tar.bz2 |
merge 3.4
Diffstat (limited to 'Python')
-rw-r--r-- | Python/pystate.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Python/pystate.c b/Python/pystate.c index 2ac2fd5..8c1fad2 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -423,6 +423,14 @@ PyThreadState_DeleteCurrent() Py_FatalError( "PyThreadState_DeleteCurrent: no current tstate"); _Py_atomic_store_relaxed(&_PyThreadState_Current, NULL); + /* + Only call tstate_delete_common to have the tstate if we're not finalizing + or we're the main thread. The main thread will do this for us. Not calling + tstate_delete_common means we won't lock the interpreter head lock, + avoiding a possible deadlock with the GIL. + */ + if (!_Py_Finalizing || _Py_Finalizing == tstate) + tstate_delete_common(tstate); if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate) PyThread_delete_key_value(autoTLSkey); tstate_delete_common(tstate); |