首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >malloc_atfork中的死锁

malloc_atfork中的死锁
EN

Stack Overflow用户
提问于 2018-05-10 02:40:28
回答 1查看 993关注 0票数 1

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

代码语言:javascript
复制
#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 bug (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的补丁。

有没有人知道这个问题的解决方案?

EN

回答 1

Stack Overflow用户

发布于 2018-05-10 02:44:20

虽然这是glibc中的一个错误,但它应该不会发生,除非你在异步信号上下文中调用fork,在异步信号上下文中,它中断了已经持有malloc锁的代码,并且被中断的代码不能继续前进。否则,持有锁的是另一个线程,该线程最终应该取得前进的进展并允许fork继续。

您是否可能从信号处理程序调用popen?如果是这样的话,这不是有效的用法,您应该预料到它会在许多其他方面失败,而不仅仅是这一种。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50260082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档