繁体   English   中英

malloc_atfork中的死锁

[英]Deadlock in malloc_atfork

我们的多线程进程死锁在多个线程中,每个线程在堆栈顶部显示下面的3个帧。 GDB显示另一个线程卡在fork中(通过popen调用),这大概就是为什么调用malloc_atfork而不是malloc分配内存的原因。

#0  0x00007f4f02c4aeec in __lll_lock_wait_private () from 
/usr/lib64/libc.so.6
#1  0x00007f4f02bc807c in _L_lock_14817 () from /usr/lib64/libc.so.6
#2  0x00007f4f02bc51df in malloc_atfork () from /usr/lib64/libc.so.6

有一个RedHat错误( https://bugzilla.redhat.com/show_bug.cgi?id=906468 ),涉及fork和malloc之间的glibc中的死锁以及有关malloc_atfork中的死锁的其他报告。

从2016年2月开始,此链接https://sourceware.org/ml/libc-alpha/2016-02/msg00269.html包含一个用于删除malloc_atfork的补丁程序。

有谁知道解决这个问题的方法吗?

尽管这是glibc中的错误,但除非从异步信号上下文中调用fork ,否则它应该不会发生,在异步信号上下文中,该示例的中断代码已持有malloc锁,而该中断代码无法向前进行。 否则,这是另一个持有锁的线程,该线程最终应前进并允许fork继续。

您可能从信号处理程序调用popen吗? 如果是这样,那将是无效的用法,您应该期望它能够以许多其他方式失败,而不仅仅是这种方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM