Я пытаюсь понять приведенный ниже сбой и не могу понять, почему/если thread_local имеет к этому какое-то отношение.
Вот как происходит сбой, как я его исправил, и мое неполное понимание того, как я не ждите первоначального сбоя (с объектом стека proton::container)
Я запускаю поток (назовем его ProtonThread, наследуя от потока и proton::messaging_handler) и в этом основном методе потока я выполняю proton::container::run(*this); в области видимости.
Это вызовет https://github.com/apache/qpid-proton/b ... id.cpp#L47 для генерации идентификатора, что означает, что thread_local создано в этой теме.
Как только proton::container::run() завершится, область действия завершится, и объект стека будет уничтожен (в ; но я также пробовал с переменной).
Это не должно повлиять на «движок» и он будет уничтожен при выходе потока. Я присоединяюсь к теме, вижу, что делаю чистый выход, чтобы все выглядело нормально.
Затем я снова запускаю тему. Теперь у меня происходит сбой при попытке запустить контейнер.
Одно из решений, которое я нашел, — не использовать объект стека в основной функции потока, а использовать член этого класса (ProtonThread). Таким образом, элемент proton::container будет создан из потока, создающего ProtonThread, что делает «движок» thread_local в этом потоке.
Это гарантирует, что «движок» жив, поскольку он является thread_local для другого потока, а не ProtonThread.< /p>
Я ожидал, что даже с ProtonThread движок thread_local должен работать нормально.
Я был бы признателен за любой намек на то, почему это может быть не так. дело
Program terminated with signal SIGABRT, Aborted.
#0 0x00007f13ede8b94c in __pthread_kill_implementation () from /lib64/libc.so.6
[Current thread is 1 (Thread 0x7f13e6ffb640 (LWP 792836))]
Missing separate debuginfos, use: dnf debuginfo-install cyrus-sasl-gssapi-2.1.27-21.el9.x86_64 cyrus-sasl-lib-2.1.27-21.el9.x86_64 cyrus-sasl-plain-2.1.27-21.el9.x86_64 gdbm-libs-1.19-4.el9.x86_64 glibc-2.34-100.el9_4.4.x86_64 jsoncpp-1.9.5-1.el9.x86_64 keyutils-libs-1.6.3-1.el9.x86_64 krb5-libs-1.21.1-2.el9_4.x86_64 libcom_err-1.46.5-5.el9.x86_64 libgcc-11.4.1-3.el9.x86_64 libnsl2-2.0.0-1.el9.x86_64 libselinux-3.6-1.el9.x86_64 libstdc++-11.4.1-3.el9.x86_64 libtirpc-1.3.3-8.el9_4.x86_64 libxcrypt-4.4.18-3.el9.x86_64 pcre2-10.40-5.el9.x86_64 qpid-proton-c-0.37.0-2.el9.x86_64 qpid-proton-cpp-0.37.0-2.el9.x86_64 zlib-1.2.11-40.el9.x86_64
(gdb) where
#0 0x00007f13ede8b94c in __pthread_kill_implementation () from /lib64/libc.so.6
#1 0x00007f13ede3e646 in raise () from /lib64/libc.so.6
#2 0x00007f13ede287f3 in abort () from /lib64/libc.so.6
#3 0x00007f13ede29130 in __libc_message.cold () from /lib64/libc.so.6
#4 0x00007f13ede959f7 in malloc_printerr () from /lib64/libc.so.6
#5 0x00007f13ede9671c in malloc_consolidate () from /lib64/libc.so.6
#6 0x00007f13ede982f8 in _int_malloc () from /lib64/libc.so.6
#7 0x00007f13ede99809 in malloc () from /lib64/libc.so.6
#8 0x00007f13ee73a75e in malloc (size=) at ../include/rtld-malloc.h:56
#9 allocate_dtv_entry (size=, alignment=8) at ../elf/dl-tls.c:730
#10 allocate_and_init (map=0x1f575e0) at ../elf/dl-tls.c:759
#11 tls_get_addr_tail (ti=0x7f13ed3fde58, dtv=0x7f13e00018f0, the_map=0x1f575e0) at ../elf/dl-tls.c:970
#12 0x00007f13ee73e76c in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55
#13 0x00007f13ed3dd187 in proton::uuid::random() () from /lib64/libqpid-proton-cpp.so.12
#14 0x00007f13ed3c6bfe in proton::container::container(proton::messaging_handler&) () from /lib64/libqpid-proton-cpp.so.12
Подробнее здесь: https://stackoverflow.com/questions/792 ... a-stack-ob
При использовании amqp qpid proton инициализация thread_local при создании объекта стека приводит к сбою моего потока, к ⇐ C++
Программы на C++. Форум разработчиков
1734032969
Anonymous
Я пытаюсь понять приведенный ниже сбой и не могу понять, почему/если thread_local имеет к этому какое-то отношение.
Вот как происходит сбой, как я его исправил, и мое неполное понимание того, как я не ждите первоначального сбоя (с объектом стека proton::container)
Я запускаю поток (назовем его ProtonThread, наследуя от потока и proton::messaging_handler) и в этом основном методе потока я выполняю proton::container::run(*this); в области видимости.
Это вызовет https://github.com/apache/qpid-proton/blob/88850e2da63e37749536d64daf23c659c896fd2a/cpp/src/uuid.cpp#L47 для генерации идентификатора, что означает, что thread_local создано в этой теме.
Как только proton::container::run() завершится, область действия завершится, и объект стека будет уничтожен (в ; но я также пробовал с переменной).
Это не должно повлиять на «движок» и он будет уничтожен при выходе потока. Я присоединяюсь к теме, вижу, что делаю чистый выход, чтобы все выглядело нормально.
Затем я снова запускаю тему. Теперь у меня происходит сбой при попытке запустить контейнер.
Одно из решений, которое я нашел, — не использовать объект стека в основной функции потока, а использовать член этого класса (ProtonThread). Таким образом, элемент proton::container будет создан из потока, создающего ProtonThread, что делает «движок» thread_local в этом потоке.
Это гарантирует, что «движок» жив, поскольку он является thread_local для другого потока, а не ProtonThread.< /p>
Я ожидал, что даже с ProtonThread движок thread_local должен работать нормально.
Я был бы признателен за любой намек на то, почему это может быть не так. дело
Program terminated with signal SIGABRT, Aborted.
#0 0x00007f13ede8b94c in __pthread_kill_implementation () from /lib64/libc.so.6
[Current thread is 1 (Thread 0x7f13e6ffb640 (LWP 792836))]
Missing separate debuginfos, use: dnf debuginfo-install cyrus-sasl-gssapi-2.1.27-21.el9.x86_64 cyrus-sasl-lib-2.1.27-21.el9.x86_64 cyrus-sasl-plain-2.1.27-21.el9.x86_64 gdbm-libs-1.19-4.el9.x86_64 glibc-2.34-100.el9_4.4.x86_64 jsoncpp-1.9.5-1.el9.x86_64 keyutils-libs-1.6.3-1.el9.x86_64 krb5-libs-1.21.1-2.el9_4.x86_64 libcom_err-1.46.5-5.el9.x86_64 libgcc-11.4.1-3.el9.x86_64 libnsl2-2.0.0-1.el9.x86_64 libselinux-3.6-1.el9.x86_64 libstdc++-11.4.1-3.el9.x86_64 libtirpc-1.3.3-8.el9_4.x86_64 libxcrypt-4.4.18-3.el9.x86_64 pcre2-10.40-5.el9.x86_64 qpid-proton-c-0.37.0-2.el9.x86_64 qpid-proton-cpp-0.37.0-2.el9.x86_64 zlib-1.2.11-40.el9.x86_64
(gdb) where
#0 0x00007f13ede8b94c in __pthread_kill_implementation () from /lib64/libc.so.6
#1 0x00007f13ede3e646 in raise () from /lib64/libc.so.6
#2 0x00007f13ede287f3 in abort () from /lib64/libc.so.6
#3 0x00007f13ede29130 in __libc_message.cold () from /lib64/libc.so.6
#4 0x00007f13ede959f7 in malloc_printerr () from /lib64/libc.so.6
#5 0x00007f13ede9671c in malloc_consolidate () from /lib64/libc.so.6
#6 0x00007f13ede982f8 in _int_malloc () from /lib64/libc.so.6
#7 0x00007f13ede99809 in malloc () from /lib64/libc.so.6
#8 0x00007f13ee73a75e in malloc (size=) at ../include/rtld-malloc.h:56
#9 allocate_dtv_entry (size=, alignment=8) at ../elf/dl-tls.c:730
#10 allocate_and_init (map=0x1f575e0) at ../elf/dl-tls.c:759
#11 tls_get_addr_tail (ti=0x7f13ed3fde58, dtv=0x7f13e00018f0, the_map=0x1f575e0) at ../elf/dl-tls.c:970
#12 0x00007f13ee73e76c in __tls_get_addr () at ../sysdeps/x86_64/tls_get_addr.S:55
#13 0x00007f13ed3dd187 in proton::uuid::random() () from /lib64/libqpid-proton-cpp.so.12
#14 0x00007f13ed3c6bfe in proton::container::container(proton::messaging_handler&) () from /lib64/libqpid-proton-cpp.so.12
Подробнее здесь: [url]https://stackoverflow.com/questions/79276410/while-using-amqp-qpid-proton-a-thread-local-initialized-when-creating-a-stack-ob[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия