Commit 994d374e authored by Jonathan Peyton's avatar Jonathan Peyton
Browse files

Merging r258990:

------------------------------------------------------------------------
r258990 | jlpeyton | 2016-01-27 15:20:26 -0600 (Wed, 27 Jan 2016) | 5 lines

Restore th_current_task first as suggested by John Mellor-Crummey

If an asynchronous inquiry peers into the runtime system
it doesn't see the freed task as the current task.

------------------------------------------------------------------------

llvm-svn: 259109
parent c45a2f6c
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -691,13 +691,12 @@ __kmp_task_finish( kmp_int32 gtid, kmp_task_t *task, kmp_taskdata_t *resumed_tas
    }

    // Free this task and then ancestor tasks if they have no children.
    // Restore th_current_task first as suggested by John:
    // johnmc: if an asynchronous inquiry peers into the runtime system
    // it doesn't see the freed task as the current task.
    thread->th.th_current_task = resumed_task;
    __kmp_free_task_and_ancestors(gtid, taskdata, thread);

    // FIXME johnmc: I this statement should be before the last one so if an
    // asynchronous inquiry peers into the runtime system it doesn't see the freed
    // task as the current task
    __kmp_threads[ gtid ] -> th.th_current_task = resumed_task; // restore current_task

    // TODO: GEH - make sure root team implicit task is initialized properly.
    // KMP_DEBUG_ASSERT( resumed_task->td_flags.executing == 0 );
    resumed_task->td_flags.executing = 1;  // resume previous task