Index: runtime/src/kmp_tasking.c =================================================================== --- runtime/src/kmp_tasking.c +++ runtime/src/kmp_tasking.c @@ -1644,7 +1644,7 @@ tail = ( thread_data -> td.td_deque_tail - 1 ) & TASK_DEQUE_MASK(thread_data->td); // Wrap index. taskdata = thread_data -> td.td_deque[ tail ]; - if (is_constrained) { + if (is_constrained && (taskdata->td_flags.tiedness == TASK_TIED)) { // we need to check if the candidate obeys task scheduling constraint: // only child of current task can be scheduled kmp_taskdata_t * current = thread->th.th_current_task; @@ -1749,7 +1749,7 @@ parent = parent->td_parent; // check generation up to the level of the current task KMP_DEBUG_ASSERT(parent != NULL); } - if ( parent != current ) { + 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 (?). __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 "