Skip to content

Static build of TBB hangs when task_arena created from static object ctor #1832

@Alexandr-Konovalov

Description

@Alexandr-Konovalov

Summary

There is a double lock of __TBB_InitOnce via ITT.

Version 2022.3.0

Environment

cmake -G Ninja -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Debug ../oneTBB
Ubuntu 22.04.5 LTS
WSL

Steps To Reproduce

struct Init {
    Init() {
        auto constraints = tbb::task_arena::constraints{}
            .set_max_threads_per_core(1);
        tbb::task_arena arena( constraints );
        arena.initialize();
    }
} init;

Backtrace is

#0  0x00007ffff7908c9b in sched_yield () at ../sysdeps/unix/syscall-template.S:120
#1  0x0000555555581a1a in __gthread_yield () at /usr/include/x86_64-linux-gnu/c++/11/bits/gthr-default.h:693
#2  0x0000555555581ba6 in std::this_thread::yield () at /usr/include/c++/11/bits/std_thread.h:329
#3  0x0000555555581c36 in tbb::detail::d0::atomic_backoff::pause (this=0x7fffffffd210) at src/tbb/../../include/oneapi/tbb/detail/_utils.h:72
#4  0x00005555555bcbea in tbb::detail::r1::__TBB_InitOnce::lock () at src/tbb/main.h:63
#5  0x00005555555c2ccb in tbb::detail::r1::ITT_DoOneTimeInitialization () at src/tbb/profiling.cpp:98
#6  0x00005555555b4123 in __itt_sync_create_init_3_0 (addr=0x555555649040, objtype=0x5555555e007d "tbb::spin_mutex", objname=0x5555555e007c "", attribute=2) at src/tbb/tools_api/ittnotify_static.h:118
#7  0x00005555555c2d20 in tbb::detail::r1::create_itt_sync (ptr=0x555555649040, objtype=0x5555555e007d "tbb::spin_mutex", objname=0x5555555e007c "") at src/tbb/profiling.cpp:105
#8  0x000055555559ee32 in tbb::detail::d1::create_itt_sync (ptr=0x555555649040, objtype=0x5555555e007d "tbb::spin_mutex", objname=0x5555555e007c "") at src/tbb/../../include/oneapi/tbb/detail/../profiling.h:114
#9  0x000055555559f8f0 in tbb::detail::d1::spin_mutex::spin_mutex (this=0x555555649040) at src/tbb/../../include/oneapi/tbb/spin_mutex.h:49
#10 0x00005555555b22df in tbb::detail::r1::control_storage::control_storage (this=0x555555649000) at src/tbb/global_control.cpp:42
#11 0x00005555555b235a in tbb::detail::r1::allowed_parallelism_control::allowed_parallelism_control (this=0x555555649000) at src/tbb/global_control.cpp:71
#12 0x00005555555b1a7e in tbb::detail::r1::global_control_acquire () at src/tbb/global_control.cpp:148
#13 0x00005555555af849 in tbb::detail::r1::governor::acquire_resources () at src/tbb/governor.cpp:74
#14 0x00005555555bc9e4 in tbb::detail::r1::__TBB_InitOnce::add_ref () at src/tbb/main.cpp:81
#15 0x00005555555bca80 in tbb::detail::r1::DoOneTimeInitialization () at src/tbb/main.cpp:108
#16 0x00005555555afac5 in tbb::detail::r1::governor::one_time_init () at src/tbb/governor.cpp:128
#17 0x00005555555afc2b in tbb::detail::r1::governor::init_external_thread () at src/tbb/governor.cpp:208
#18 0x000055555559f6e3 in tbb::detail::r1::governor::get_thread_data () at src/tbb/governor.h:104
#19 0x000055555559d083 in tbb::detail::r1::task_arena_impl::initialize (ta=...) at src/tbb/arena.cpp:576
#20 0x000055555559cee2 in tbb::detail::r1::initialize (ta=...) at src/tbb/arena.cpp:535
#21 0x0000555555582019 in tbb::detail::d1::task_arena::initialize()::{lambda()#1}::operator()() const (__closure=0x7fffffffd5a0) at src/tbb/../../include/oneapi/tbb/task_arena.h:396
#22 0x0000555555588805 in tbb::detail::d0::run_initializer<tbb::detail::d1::task_arena::initialize()::{lambda()#1}>(tbb::detail::d1::task_arena::initialize()::{lambda()#1} const&, std::atomic<tbb::detail::d0::do_once_state>&) (f=..., state=std::atomic<tbb::detail::d0::do_once_state> = { tbb::detail::d0::do_once_state::pending }) at src/tbb/../../include/oneapi/tbb/detail/_utils.h:295
#23 0x00005555555843f9 in tbb::detail::d0::atomic_do_once<tbb::detail::d1::task_arena::initialize()::{lambda()#1}>(tbb::detail::d1::task_arena::initialize()::{lambda()#1} const&, std::atomic<tbb::detail::d0::do_once_state>&) (initializer=..., state=std::atomic<tbb::detail::d0::do_once_state> = { tbb::detail::d0::do_once_state::pending }) at src/tbb/../../include/oneapi/tbb/detail/_utils.h:284
#24 0x000055555558205a in tbb::detail::d1::task_arena::initialize (this=0x7fffffffd5e0) at src/tbb/../../include/oneapi/tbb/task_arena.h:396
#25 0x00005555555841f6 in Init::Init (this=0x5555556205d0 <init>) at test/tbb/test_tbbbind.cpp:156
#26 0x000055555558162b in __static_initialization_and_destruction_0 (__initialize_p=1, __priority=65535) at test/tbb/test_tbbbind.cpp:158
#27 0x000055555558197f in _GLOBAL__sub_I__ZN7doctest18is_running_in_testE () at test/tbb/test_tbbbind.cpp:173
#28 0x00007ffff7829ebb in call_init (env=<optimized out>, argv=0x7fffffffd7d8, argc=1) at ../csu/libc-start.c:145
#29 __libc_start_main_impl (main=0x55555557c36b <main(int, char**)>, argc=1, argv=0x7fffffffd7d8, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffd7c8) at ../csu/libc-start.c:379
#30 0x0000555555566845 in _start ()

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions