From 727ba6e84300a633bf1248b116d2eb3d6a8c79cc Mon Sep 17 00:00:00 2001 From: Jonathan Peyton Date: Wed, 27 Jan 2016 21:20:26 +0000 Subject: 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: 258990 --- openmp/runtime/src/kmp_tasking.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'openmp/runtime') diff --git a/openmp/runtime/src/kmp_tasking.c b/openmp/runtime/src/kmp_tasking.c index 8ea6554f859..fc9348c94e2 100644 --- a/openmp/runtime/src/kmp_tasking.c +++ b/openmp/runtime/src/kmp_tasking.c @@ -690,13 +690,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 -- cgit v1.2.3