Merge pull request #3111 from hawkinsp/forkrace

Fix race in blas_thread_shutdown.
This commit is contained in:
Martin Kroeker 2021-02-19 09:57:18 +01:00 committed by GitHub
commit 1caa44bea9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 19 additions and 18 deletions

View File

@ -1024,38 +1024,39 @@ int BLASFUNC(blas_thread_shutdown)(void){
int i; int i;
if (!blas_server_avail) return 0;
LOCK_COMMAND(&server_lock); LOCK_COMMAND(&server_lock);
for (i = 0; i < blas_num_threads - 1; i++) { if (blas_server_avail) {
for (i = 0; i < blas_num_threads - 1; i++) {
pthread_mutex_lock (&thread_status[i].lock); pthread_mutex_lock (&thread_status[i].lock);
atomic_store_queue(&thread_status[i].queue, (blas_queue_t *)-1); atomic_store_queue(&thread_status[i].queue, (blas_queue_t *)-1);
thread_status[i].status = THREAD_STATUS_WAKEUP; thread_status[i].status = THREAD_STATUS_WAKEUP;
pthread_cond_signal (&thread_status[i].wakeup); pthread_cond_signal (&thread_status[i].wakeup);
pthread_mutex_unlock(&thread_status[i].lock); pthread_mutex_unlock(&thread_status[i].lock);
} }
for(i = 0; i < blas_num_threads - 1; i++){ for(i = 0; i < blas_num_threads - 1; i++){
pthread_join(blas_threads[i], NULL); pthread_join(blas_threads[i], NULL);
} }
for(i = 0; i < blas_num_threads - 1; i++){ for(i = 0; i < blas_num_threads - 1; i++){
pthread_mutex_destroy(&thread_status[i].lock); pthread_mutex_destroy(&thread_status[i].lock);
pthread_cond_destroy (&thread_status[i].wakeup); pthread_cond_destroy (&thread_status[i].wakeup);
} }
#ifdef NEED_STACKATTR #ifdef NEED_STACKATTR
pthread_attr_destory(&attr); pthread_attr_destroy(&attr);
#endif #endif
blas_server_avail = 0; blas_server_avail = 0;
}
UNLOCK_COMMAND(&server_lock); UNLOCK_COMMAND(&server_lock);
return 0; return 0;