Skip to content

~PoshRuntimeImpl(): does not exit #2493

@lucabart97

Description

@lucabart97

Required information

Operating system:
Ubuntu 22.04 LTS

Compiler version:
GCC 11.4.0

Eclipse iceoryx version:
2.95.6

Observed result or behaviour:
The runtime does not exit from iox::runtime::PoshRuntimeImpl::~PoshRuntimeImpl()

Expected result or behaviour:
Correct exit of the runtime

Conditions where it occurred / Performed steps:
We have many pipelines for our code, and occasionally one of the tests gets stuck on this destructor. To reproduce the issue, I ran a single test on my machine for a week, and it finally happened today.

Additional helpful information

We have GDB open, and this is the stack trace. Could you please help us debug it and find out why this happens?

(gdb) t 1
[Switching to thread 1 (Thread 0x7ffff7e20b80 (LWP 79268))]
#0  __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, expected=79276, futex_word=0x7ffff7234910) at ./nptl/futex-internal.c:57
57      ./nptl/futex-internal.c: No such file or directory.
(gdb) bt full
#0  __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265, expected=79276, futex_word=0x7ffff7234910) at ./nptl/futex-internal.c:57
        sc_cancel_oldtype = 0
        sc_ret = <optimized out>
        resultvar = <optimized out>
        __arg6 = <optimized out>
        __arg5 = <optimized out>
        __arg4 = <optimized out>
        __arg3 = <optimized out>
        __arg2 = <optimized out>
        __arg1 = <optimized out>
        _a6 = <optimized out>
        _a5 = <optimized out>
        _a4 = <optimized out>
        _a3 = <optimized out>
        _a2 = <optimized out>
        _a1 = <optimized out>
#1  __futex_abstimed_wait_common (cancel=true, private=128, abstime=0x0, clockid=0, expected=79276, futex_word=0x7ffff7234910) at ./nptl/futex-internal.c:87
        err = <optimized out>
        clockbit = 256
        op = 265
        err = <optimized out>
        clockbit = <optimized out>
        op = <optimized out>
#2  __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7ffff7234910, expected=79276, clockid=clockid@entry=0, abstime=abstime@entry=0x0, private=private@entry=128) at ./nptl/futex-internal.c:139
No locals.
#3  0x00007ffff7441624 in __pthread_clockjoin_ex (threadid=140737339672128, thread_return=0x0, clockid=0, abstime=0x0, block=<optimized out>) at ./nptl/pthread_join_common.c:105
        ret = <optimized out>
        _buffer = {__routine = 0x7ffff74414d0 <cleanup>, __arg = 0x7ffff7234c68, __canceltype = -13760, __prev = 0x0}
        tid = <optimized out>
        pd = 0x7ffff7234640
        self = <optimized out>
        result = 0
        pd_result = <optimized out>
#4  0x00007ffff76b02c7 in std::thread::join() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
No symbol table info available.
#5  0x00007ffff7a718a1 in iox::concurrent::detail::PeriodicTask<iox::storable_function<128ul, void ()> >::stop() (this=0x7ffff7e02820 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::buf+420000>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/concurrent/sync_extended/include/iox/detail/periodic_task.inl:73
No locals.
#6  0x00007ffff7a70074 in iox::concurrent::detail::PeriodicTask<iox::storable_function<128ul, void ()> >::~PeriodicTask() (this=0x7ffff7e02820 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::buf+420000>, __in_chrg=<optimized out>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/concurrent/sync_extended/include/iox/detail/periodic_task.inl:56
No locals.
#7  0x00007ffff7a6e4e6 in iox::optional<iox::concurrent::detail::PeriodicTask<iox::storable_function<128ul, void ()> > >::destruct_value() (this=0x7ffff7e02818 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::buf+419992>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/vocabulary/include/iox/detail/optional.inl:291
No locals.
#8  0x00007ffff7a6d2e9 in iox::optional<iox::concurrent::detail::PeriodicTask<iox::storable_function<128ul, void ()> > >::~optional() (this=0x7ffff7e02818 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::buf+419992>, __in_chrg=<optimized out>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/vocabulary/include/iox/detail/optional.inl:161
No locals.
#9  0x00007ffff7a66ae8 in iox::runtime::PoshRuntimeImpl::~PoshRuntimeImpl (this=0x7ffff7d9bf80 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::buf>, __in_chrg=<optimized out>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_posh/source/runtime/posh_runtime_impl.cpp:148
        sendBuffer = <optimized out>
        receiveBuffer = <optimized out>
        IpcMessage = <optimized out>
        __FUNCTION__ = <optimized out>
        sendBuffer = <optimized out>
        receiveBuffer = <optimized out>
        IpcMessage = <optimized out>
#10 0x00007ffff7a63c21 in operator() (__closure=0x7ffff7e02960 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::staticLifetimeParticipant+32>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_posh/source/runtime/posh_runtime.cpp:117
No locals.
#11 0x00007ffff7a6429e in iox::storable_function<128, void()>::invoke<iox::runtime::PoshRuntime::getLifetimeParticipant()::<lambda()> >(void *) (callable=0x7ffff7e02960 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::staticLifetimeParticipant+32>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/functional/include/iox/detail/storable_function.inl:311
No locals.
#12 0x00007ffff7a65242 in iox::storable_function<128ul, void ()>::operator()() const (this=0x7ffff7e02948 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::staticLifetimeParticipant+8>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/functional/include/iox/detail/storable_function.inl:168
        __FUNCTION__ = "operator()"
#13 0x00007ffff7a64b9e in iox::ScopeGuardWithVariableCapacity<128ul>::destroy (this=0x7ffff7e02940 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::staticLifetimeParticipant>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/memory/include/iox/detail/scope_guard.inl:84
No locals.
#14 0x00007ffff7a647a0 in iox::ScopeGuardWithVariableCapacity<128ul>::~ScopeGuardWithVariableCapacity (this=0x7ffff7e02940 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::staticLifetimeParticipant>, __in_chrg=<optimized out>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/memory/include/iox/detail/scope_guard.inl:43
No locals.
#15 0x00007ffff73f0495 in __run_exit_handlers (status=0, listp=0x7ffff75c5838 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true, run_dtors=run_dtors@entry=true) at ./stdlib/exit.c:113
        atfct = <optimized out>
        onfct = <optimized out>
        cxafct = <optimized out>
        arg = 0x7ffff7e02940 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::staticLifetimeParticipant>
        f = <optimized out>
        new_exitfn_called = <optimized out>
        cur = 0x555555652130
#16 0x00007ffff73f0610 in __GI_exit (status=<optimized out>) at ./stdlib/exit.c:143
No locals.
#17 0x00007ffff73d4d97 in __libc_start_call_main (main=main@entry=0x5555555756b0 <main(int, char**)>, argc=argc@entry=3, argv=argv@entry=0x7fffffffce68) at ../sysdeps/nptl/libc_start_call_main.h:74
        result = <optimized out>
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {0, 7375180221807022210, 140737488342632, 93824992368304, 93824993167416, 140737354125376, -7375180223470546814, -7375197253012205438}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x55555563e008, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 1432608776}}}
        not_first_call = <optimized out>
#18 0x00007ffff73d4e40 in __libc_start_main_impl (main=0x5555555756b0 <main(int, char**)>, argc=3, argv=0x7fffffffce68, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffce58) at ../csu/libc-start.c:392
No locals.
#19 0x0000555555576ed5 in _start ()
(gdb) f 5
#5  0x00007ffff7a718a1 in iox::concurrent::detail::PeriodicTask<iox::storable_function<128ul, void ()> >::stop() (this=0x7ffff7e02820 <iox::runtime::PoshRuntime::defaultRuntimeFactory(iox::optional<iox::string<87ul> const*>)::buf+420000>) at /workspaces/tk.ws4/build/iceoryx-2.95.6-mmap/iceoryx_hoofs/concurrent/sync_extended/include/iox/detail/periodic_task.inl:73
73              m_taskExecutor.join();
(gdb) p m_stop
$1 = {<iox::internal::FunctionalInterfaceImpl<iox::optional<iox::UnnamedSemaphore>, iox::UnnamedSemaphore, void>> = {<iox::internal::ExpectWithValue<iox::optional<iox::UnnamedSemaphore>, iox::UnnamedSemaphore>> = {<No data fields>}, <iox::internal::ValueOr<iox::optional<iox::UnnamedSemaphore>, iox::UnnamedSemaphore>> = {<No data fields>}, <iox::internal::AndThenWithValue<iox::optional<iox::UnnamedSemaphore>, iox::UnnamedSemaphore>> = {<No data fields>}, <iox::internal::OrElse<iox::optional<iox::UnnamedSemaphore> >> = {<No data fields>}, <No data fields>}, m_hasValue = true, m_data = {data = {(unknown: 0x1), 0 <repeats 31 times>, (unknown: 0x1), 0, 0, 0, 0, 0, 0, 0}}}
(gdb)

Metadata

Metadata

Assignees

No one assigned

    Labels

    needs infoA bug report is waiting for more information

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions