День добрый.
Есть сишная программка, которая после длительного времени работы крэшится.
Вот с таким стэком. И на консоли "
double free or corruption (fasttop)"
Помимо этого потока есть основной и еще 12 потоков, которые спят.
| стэк |
| 0
__libc_do_syscall
:
1
raise
/usr/src/debug/glibc/2.31+gitAUTOINC+1094741224-r0/git/signal/../sysdeps/unix/sysv/linux/internal-signals.h:86
2
abort
/usr/src/debug/glibc/2.31+gitAUTOINC+1094741224-r0/git/stdlib/abort.c:79
3
__libc_message
/usr/src/debug/glibc/2.31+gitAUTOINC+1094741224-r0/git/libio/../sysdeps/posix/libc_fatal.c:155
4
malloc_printerr
/usr/src/debug/glibc/2.31+gitAUTOINC+1094741224-r0/git/malloc/malloc.c:5347
5
_int_free
/usr/src/debug/glibc/2.31+gitAUTOINC+1094741224-r0/git/malloc/malloc.c:4177
6
__malloc_arena_thread_freeres
/usr/src/debug/glibc/2.31+gitAUTOINC+1094741224-r0/git/malloc/malloc.c:2964
7
start_thread
/usr/src/debug/glibc/2.31+gitAUTOINC+1094741224-r0/git/nptl/pthread_create.c:491
8
clone
|
| |
В коде много мест где создаются различные потоки и даже есть fork().
Как сузить место поиска? Можно ли сказать что это точно не в fork() или наоборот?
Если это double free, то как это может быть связано с разрушением "арены" потока? Т.е. я не представляю код, который бы мог вызвать такую ошибку, раз повторное освобождение памяти случается при разрушении потока.
Означает ли это что стэк кто-то топчет?
Заранее спасибо!
Если есть желание — найдется 1000 возможностей.
Если нет желания — найдется 1000 причин.