Согласно Oracle Multithreaded Programming Guide, fork()
должен быть безопасным для использования внутри обработчиков сигналов. Но мой процесс застрял внутри обработчика сигнала с к следующей обратной трассировке:Асинхронный сигнал безопасности вилки()
#0 __lll_lock_wait_private() at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
#1 0x00007f86e6a9990d in _L_lock_48() from /lib/x86_64-linux- gnu/libc.so.6
#2 0x00007f86e6a922ec in ptmalloc_lock_all() at arena.c:242
#3 0x00007f86e6ad5e82 in __libc_fork() at ./nptl/sysdeps/unix/sysv/linux/x86_64/../fork.c:95
#4 0x00007f86e7d9f125 in __fork() at ./nptl/sysdeps/unix/sysv/linux/pt-fork.c:25
....
#7 signal handler called
Так, как malloc
не безопасно быть использованы в обработчике сигнала, как fork
может быть?
Заранее спасибо.
Это, вероятно, не 'fork', это проблема, но * ваш * код, который следует за вызовом. (Обратите внимание, что трассировки стека могут вводить в заблуждение, если у вас есть сломанный обработчик сигналов.) –
Дайте нам достаточно кода для репликации проблемы. Скорее всего, в процессе подготовки этого кода вы обнаружите проблему - это будет то, что вы удалили, что заставило проблему уйти. –
, но замок находится внутри fork() - так как это может быть связано с кодом, который приходит после этого? –