两个线程同时中止()

Dmi*_*kov 7 c c++ linux crash multithreading

我有一些我以前从未见过的回溯.请参见以下主题中的第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 ()
Run Code Online (Sandbox Code Playgroud)

当用gdb打开它并获得回溯它给我线程1.后来我看到了线程31所处的奇怪状态.这个线程来自我们遇到问题的库,所以我认为崩溃是由它引起的.

那是什么意思呢?两个线程同时做违法的事情?或者它是其中之一,在另一个中导致某种程度上的abort()?

操作系统是Linux Red Hat Enterprise 5.3,它是一个多处理器服务器.

Eri*_*rik 3

看起来可能是堆损坏,由线程 1 中的 malloc 检测到,导致或由线程 31 中的错误引起。

一些损坏的代码覆盖线程 31 中的 vtable 很容易导致这种情况。