eclipse-iceoryx / iceoryx

Eclipse iceoryx™ - true zero-copy inter-process-communication
https://iceoryx.io
Apache License 2.0
1.68k stars 393 forks source link

When using this library for shared memory communication in docker, I often encounter the following error and then crash #2165

Closed Createrinfuture closed 7 months ago

Createrinfuture commented 10 months ago

Required information

Operating system: Ubuntu 20.04 LTS

Compiler version: gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0

Eclipse iceoryx version: master branch

Observed result or behaviour: 2024-01-19 07:25:21.418 [Error]: Condition: has_value() in T& iox::optional::value() & [with T = iox::posix::UnnamedSemaphore] is violated. (/iceoryx/iceoryx_hoofs/vocabulary/include/iox/detail/optional.inl:242) 2024-01-19 07:25:21.418 [Error]: ICEORYX error! EXPECTS_ENSURES_FAILED terminate called without an active exception

[2024.01.19-08.05.22:92024-01-19 08:05:22.970 [Error]: Condition: ptr != nullptr in T* iox::RelativePointer::operator->() const [with T = iox::mepoo::ChunkManagement] is violated. (/iceoryx/iceoryx_hoofs/memory/include/iox/detail/relative_pointer.inl:106) 2024-01-19 08:05:22.970 [Error]: ICEORYX error! EXPECTS_ENSURES_FAILED

Expected result or behaviour: When using this library, do not crash when encountering an error, so that external programs can catch exceptions or provide solutions.

Conditions where it occurred / Performed steps: When using k8s to deploy multiple docker images containing the iceoryx library

elBoberido commented 10 months ago

Are the applications communicating across docker instances when this happens?

Unfortunately, the log messages are not that helpful. Can you run your applications with the log level set to debug? You can use iox::log::Logger::init(iox::log::logLevelFromEnvOr(iox::log::LogLevel::INFO)); by default and set the log level with the IOX_LOG_LEVEL environment variable. See also https://github.com/eclipse-iceoryx/iceoryx/blob/master/doc/design/logging.md#environment-variables.

Can you create a backtrace from a crashed application with this command

gdb --batch \
   --ex "shell printf '\n\033[33m#### Local Variables ####\033[m\n'"  --ex "info locals" \
   --ex "shell printf '\n\033[33m#### Threads ####\033[m\n'"          --ex "info threads" \
   --ex "shell printf '\n\033[33m#### Shared Libraries ####\033[m\n'" --ex "info sharedlibrary" \
   --ex "shell printf '\n\033[33m#### Stack Frame ####\033[m\n'"      --ex "info frame" \
   --ex "shell printf '\n\033[33m#### Register ####\033[m\n'"         --ex "info register" \
   --ex "shell printf '\n\033[33m#### Backtrace ####\033[m'"          --ex "thread apply all bt" \
   --core coreDumpFile binaryFile

With coreDumpFile the path to the actual core dump file and binaryFile the path to the crashed binary

elBoberido commented 8 months ago

@Createrinfuture without the requested information we cannot determine if it is an error in the feamework or in the way iceoryx is used. Please provide te requested information or we need to close the issue

elBoberido commented 7 months ago

@Createrinfuture closing this issue due to lack of further information. Feel free to re-open with the requested information