Merging r285703: ------------------------------------------------------------------------ r285703 | achurbanov | 2016-11-01 11:19:04 -0500 (Tue, 01 Nov 2016) | 9 lines Fixed problem introduced by part of https://reviews.llvm.org/D21196. Check Task Scheduling Constraint (TSC) on stealing of untied task. This is needed because the untied task can produce tied children those can break TSC if untied is not a descendant of current task. This can cause live lock on complex tyasking tests (e.g. kastors/strassen-task-dep). Differential Revision: https://reviews.llvm.org/D26182 ------------------------------------------------------------------------ git-svn-id: https://llvm.org/svn/llvm-project/openmp/branches/release_39@287561 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/runtime/src/kmp_tasking.c b/runtime/src/kmp_tasking.c index 9a64045..8875809 100644 --- a/runtime/src/kmp_tasking.c +++ b/runtime/src/kmp_tasking.c
@@ -1788,8 +1788,8 @@ parent = parent->td_parent; // check generation up to the level of the current task KMP_DEBUG_ASSERT(parent != NULL); } - if ( parent != current && (taskdata->td_flags.tiedness == TASK_TIED) ) { // untied is always allowed to be stolen - // If the tail task is not a child, then no other childs can appear in the deque (?). + if ( parent != current ) { + // If the tail task is not a descendant of the current task then do not steal it. __kmp_release_bootstrap_lock( & victim_td -> td.td_deque_lock ); KA_TRACE(10, ("__kmp_steal_task(exit #2): T#%d could not steal from T#%d: task_team=%p " "ntasks=%d head=%u tail=%u\n",