Мы создали многопоточное одноядерное приложение, работающее на Ubuntu.
Когда мы вызываем getaddrinfo
и gethostbyname
из основного процесса, он не падает.
Однако, когда мы создаем поток из основного процесса и функции getaddrinfo
и gethostbyname
вызываются из созданного потока, он всегда падает.
Пожалуйста, помогите. Пожалуйста, найдите стек вызовов ниже:
#0 0xf7e9f890 in ?? () from /lib/i386-linux-gnu/libc.so.6
#1 0xf7e9fa73 in __res_ninit () from /lib/i386-linux-gnu/libc.so.6
#2 0xf7ea0a68 in __res_maybe_init () from /lib/i386-linux-gnu/libc.so.6
#3 0xf7e663be in ?? () from /lib/i386-linux-gnu/libc.so.6
#4 0xf7e696bb in getaddrinfo () from /lib/i386-linux-gnu/libc.so.6
#5 0x080c4e35 in mn_task_entry (args=0xa6c4130 <ipc_os_input_params>) at /home/nextg/Alps_RT/mn/src/mn_main.c:699
#6 0xf7fa5d78 in start_thread () from /lib/i386-linux-gnu/libpthread.so.0
#7 0xf7e9001e in clone () from /lib/i386-linux-gnu/libc.so.6
gethostbyname
не требует повторного входа и поэтому, вероятно, не является потокобезопасным, если вызывается из нескольких потоков. Если вы используетеglibc
в качестве библиотеки c, вы можете попробовать использоватьgethostbyname_r
, чтобы посмотреть, решит ли это проблему. - person John Ledbetter   schedule 26.09.2014