@@ -254,11 +254,13 @@ d1::task* task_dispatcher::local_wait_for_all(d1::task* t, Waiter& waiter ) {
254254 task_dispatcher& task_disp;
255255 execution_data_ext old_execute_data_ext;
256256 properties old_properties;
257+ d1::task* old_innermost_running_task;
257258 bool is_initially_registered;
258259
259260 ~dispatch_loop_guard () {
260261 task_disp.m_execute_data_ext = old_execute_data_ext;
261262 task_disp.m_properties = old_properties;
263+ task_disp.m_innermost_running_task = old_innermost_running_task;
262264
263265 if (!is_initially_registered) {
264266 task_disp.m_thread_data ->my_arena ->my_tc_client .get_pm_client ()->unregister_thread ();
@@ -268,7 +270,7 @@ d1::task* task_dispatcher::local_wait_for_all(d1::task* t, Waiter& waiter ) {
268270 __TBB_ASSERT (task_disp.m_thread_data && governor::is_thread_data_set (task_disp.m_thread_data ), nullptr );
269271 __TBB_ASSERT (task_disp.m_thread_data ->my_task_dispatcher == &task_disp, nullptr );
270272 }
271- } dl_guard{ *this , m_execute_data_ext, m_properties, m_thread_data->my_is_registered };
273+ } dl_guard{ *this , m_execute_data_ext, m_properties, m_innermost_running_task, m_thread_data->my_is_registered };
272274
273275 // The context guard to track fp setting and itt tasks.
274276 context_guard_helper</* report_tasks=*/ ITTPossible> context_guard;
@@ -331,6 +333,9 @@ d1::task* task_dispatcher::local_wait_for_all(d1::task* t, Waiter& waiter ) {
331333 void * itt_caller = ed.context ->my_itt_caller ;
332334 suppress_unused_warning (itt_caller);
333335
336+ d1::task* prev_innermost_running_task = m_innermost_running_task;
337+ m_innermost_running_task = t;
338+
334339 ITT_CALLEE_ENTER (ITTPossible, t, itt_caller);
335340
336341 if (ed.context ->is_group_execution_cancelled ()) {
@@ -346,6 +351,7 @@ d1::task* task_dispatcher::local_wait_for_all(d1::task* t, Waiter& waiter ) {
346351 ed.affinity_slot = d1::no_slot;
347352 // Reset task owner id for bypassed task
348353 ed.original_slot = m_thread_data->my_arena_index ;
354+ m_innermost_running_task = prev_innermost_running_task;
349355 t = get_critical_task (t, ed, isolation, critical_allowed);
350356 }
351357 __TBB_ASSERT (m_thread_data && governor::is_thread_data_set (m_thread_data), nullptr );
0 commit comments