| --- a/Lib/threading.py |
| +++ b/Lib/threading.py |
| @@ -1047,21 +1047,18 @@ |
| current = current_thread() |
| with _active_limbo_lock: |
| for thread in _active.values(): |
| + # Any lock/condition variable may be currently locked or in invalid |
| + # state, so we reinitialize them. |
| + thread._reset_internal_locks() |
| if thread is current: |
| # There is only one active thread. We reset the ident to |
| # its new value since it can have changed. |
| ident = get_ident() |
| thread._ident = ident |
| - # Any condition variables hanging off of the active thread may |
| - # be in an invalid state, so we reinitialize them. |
| - thread._reset_internal_locks() |
| new_active[ident] = thread |
| else: |
| # All the others are already stopped. |
| - # We don't call _Thread__stop() because it tries to acquire |
| - # thread._Thread__block which could also have been held while |
| - # we forked. |
| - thread._stopped = True |
| + thread._stop() |
| _limbo.clear() |
| _active.clear() |