mirror of https://github.com/python/cpython
Signal condition variables with the mutex held. Destroy condition variables
before their mutexes.
This commit is contained in:
parent
902274e948
commit
187aa54516
|
@ -313,13 +313,14 @@ static void create_gil(void)
|
|||
|
||||
static void destroy_gil(void)
|
||||
{
|
||||
/* some pthread-like implementations tie the mutex to the cond
|
||||
* and must have the cond destroyed first.
|
||||
*/
|
||||
COND_FINI(gil_cond);
|
||||
MUTEX_FINI(gil_mutex);
|
||||
#ifdef FORCE_SWITCHING
|
||||
MUTEX_FINI(switch_mutex);
|
||||
#endif
|
||||
COND_FINI(gil_cond);
|
||||
#ifdef FORCE_SWITCHING
|
||||
COND_FINI(switch_cond);
|
||||
MUTEX_FINI(switch_mutex);
|
||||
#endif
|
||||
_Py_atomic_store_explicit(&gil_locked, -1, _Py_memory_order_release);
|
||||
_Py_ANNOTATE_RWLOCK_DESTROY(&gil_locked);
|
||||
|
|
|
@ -443,12 +443,15 @@ PyThread_free_lock(PyThread_type_lock lock)
|
|||
|
||||
dprintf(("PyThread_free_lock(%p) called\n", lock));
|
||||
|
||||
status = pthread_mutex_destroy( &thelock->mut );
|
||||
CHECK_STATUS("pthread_mutex_destroy");
|
||||
|
||||
/* some pthread-like implementations tie the mutex to the cond
|
||||
* and must have the cond destroyed first.
|
||||
*/
|
||||
status = pthread_cond_destroy( &thelock->lock_released );
|
||||
CHECK_STATUS("pthread_cond_destroy");
|
||||
|
||||
status = pthread_mutex_destroy( &thelock->mut );
|
||||
CHECK_STATUS("pthread_mutex_destroy");
|
||||
|
||||
free((void *)thelock);
|
||||
}
|
||||
|
||||
|
@ -531,12 +534,12 @@ PyThread_release_lock(PyThread_type_lock lock)
|
|||
|
||||
thelock->locked = 0;
|
||||
|
||||
status = pthread_mutex_unlock( &thelock->mut );
|
||||
CHECK_STATUS("pthread_mutex_unlock[3]");
|
||||
|
||||
/* wake up someone (anyone, if any) waiting on the lock */
|
||||
status = pthread_cond_signal( &thelock->lock_released );
|
||||
CHECK_STATUS("pthread_cond_signal");
|
||||
|
||||
status = pthread_mutex_unlock( &thelock->mut );
|
||||
CHECK_STATUS("pthread_mutex_unlock[3]");
|
||||
}
|
||||
|
||||
#endif /* USE_SEMAPHORES */
|
||||
|
|
Loading…
Reference in New Issue