From a4a9c48c784cb01a36dad9b6aa9e828334df31f6 Mon Sep 17 00:00:00 2001 From: Jonathan Peyton Date: Fri, 24 Aug 2018 18:07:35 +0000 Subject: [PATCH] [OpenMP] Fix tasking bug for decreasing hot team nthreads The __kmp_execute_tasks_template() function reads the task_team and current_task from the thread structure. There appears to be a pathological timing where the number of threads in the hot team decreases and so a thread is put in the pool via __kmp_free_thread(). It could be the case that: 1) A thread reads th_task_team into task_team local variables and is then interrupted by the OS 2) Master frees the thread and sets current task and task team to NULL 3) The thread reads current_task as NULL When this happens, current_task is dereferenced and a segfault occurs. This patch just checks for current_task to not be NULL as well. Differential Revision: https://reviews.llvm.org/D50651 llvm-svn: 340632 --- openmp/runtime/src/kmp_tasking.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openmp/runtime/src/kmp_tasking.cpp b/openmp/runtime/src/kmp_tasking.cpp index d9220c5..e1b03f7 100644 --- a/openmp/runtime/src/kmp_tasking.cpp +++ b/openmp/runtime/src/kmp_tasking.cpp @@ -2469,7 +2469,7 @@ static inline int __kmp_execute_tasks_template( KMP_DEBUG_ASSERT(__kmp_tasking_mode != tskm_immediate_exec); KMP_DEBUG_ASSERT(thread == __kmp_threads[gtid]); - if (task_team == NULL) + if (task_team == NULL || current_task == NULL) return FALSE; KA_TRACE(15, ("__kmp_execute_tasks_template(enter): T#%d final_spin=%d " -- 2.7.4