У меня есть кое-что, чего я раньше не видел. См. Фрейм 2 в этих потоках:
Thread 31 (process 8752):
#0 0x00faa410 in __kernel_vsyscall ()
#1 0x00b0b139 in sigprocmask () from /lib/libc.so.6
#2 0x00b0c7a2 in abort () from /lib/libc.so.6
#3 0x00752aa0 in __gnu_cxx::__verbose_terminate_handler () from /usr/lib/libstdc++.so.6
#4 0x00750505 in ?? () from /usr/lib/libstdc++.so.6
#5 0x00750542 in std::terminate () from /usr/lib/libstdc++.so.6
#6 0x00750c65 in __cxa_pure_virtual () from /usr/lib/libstdc++.so.6
#7 0x00299c63 in ApplicationFunction()
Thread 1 (process 8749):
#0 0x00faa410 in __kernel_vsyscall ()
#1 0x00b0ad80 in raise () from /lib/libc.so.6
#2 0x00b0c691 in abort () from /lib/libc.so.6
#3 0x00b4324b in __libc_message () from /lib/libc.so.6
#4 0x00b495b6 in malloc_consolidate () from /lib/libc.so.6
#5 0x00b4b3bd in _int_malloc () from /lib/libc.so.6
#6 0x00b4d3ab in malloc () from /lib/libc.so.6
#7 0x08147f03 in AnotherApplicationFunction ()
Открывая его с помощью gdb и получая обратную трассировку, я получаю поток 1. Позже я увидел странное состояние, в котором находится поток 31. Этот поток из библиотеки, с которой у нас были проблемы, поэтому я ' Я полагаю, что авария вызвана им.
Так что это значит? Два потока одновременно делают что-то незаконное? Или один из них каким-то образом вызывает abort () в другом?
ОС - Linux Red Hat Enterprise 5.3, это многопроцессорный сервер.