Permalink
Browse files
Signal condition variables with the mutex held. Destroy condition var…
…iables
before their mutexes.
- Loading branch information
Showing
with
14 additions
and
10 deletions.
-
+5
−4
Python/ceval_gil.h
-
+9
−6
Python/thread_pthread.h
|
@@ -313,13 +313,14 @@ static void create_gil(void) |
|
|
|
|
|
static void destroy_gil(void) |
|
|
{ |
|
|
MUTEX_FINI(gil_mutex); |
|
|
#ifdef FORCE_SWITCHING |
|
|
MUTEX_FINI(switch_mutex); |
|
|
#endif |
|
|
/* 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 |
|
|
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 */ |
|
|
0 comments on commit
187aa54