当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 6 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : malloc阻塞,急啊,搞了半个月了!
帖子发表于 : 2010-12-02 15:44 

注册: 2009-11-25 18:34
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
各位大侠,小弟最近在弄一个嵌入式开发,交叉编译工具是 arm-uclibc-linux-gcc 3.4.3,在调试代码的时候发现在线程里面调用malloc分配内存的时候,malloc阻塞了。按理说,malloc分配失败也会返回啊。我后面打印了堆栈信息,发现malloc好像是被睡眠了。我现在就想知道malloc阻塞的情况有哪些,我现在不好定位问题啊。malloc的源代码好像有很多版本,我们板子上的系统用的库是uClibc-0.9.28。

下面我贴出栈信息:
gdb) info threads
9 Thread 7176 (LWP 83) 0x4007bca0 in __syscall_ipc () from /lib/libc.so.0
* 8 Thread 6151 (LWP 82) 0x4007bca0 in __syscall_ipc () from /lib/libc.so.0
7 Thread 5126 (LWP 81) 0x4007d58c in nanosleep () from /lib/libc.so.0
6 Thread 4101 (LWP 80) 0x4007d58c in nanosleep () from /lib/libc.so.0
5 Thread 3076 (LWP 79) 0x4007d58c in nanosleep () from /lib/libc.so.0
4 Thread 2051 (LWP 78) 0x4007db7c in read () from /lib/libc.so.0
3 Thread 1026 (LWP 77) 0x4007d58c in nanosleep () from /lib/libc.so.0
2 Thread 2049 (LWP 76) 0x4007d788 in poll () from /lib/libc.so.0
1 Thread 1024 (LWP 73) main (argc=1, argv=0xbed60e74) at main.c:67
(gdb) thread 6
[Switching to thread 6 (Thread 4101 (LWP 80))]#0 0x4007d58c in nanosleep ()
from /lib/libc.so.0
(gdb) bt 10
#0 0x4007d58c in nanosleep () from /lib/libc.so.0
#1 0x400366f0 in nanosleep () from /lib/libpthread.so.0
#2 0x400360c0 in __pthread_acquire () from /lib/libpthread.so.0
#3 0x40031c98 in pthread_mutex_lock () from /lib/libpthread.so.0
#4 0x40078c40 in malloc () from /lib/libc.so.0
#5 0x0000bf90 in _receive_data (args=0xfffffdfc) at bls_demux.c:164
#6 0x40030ac4 in pthread_start_thread () from /lib/libpthread.so.0
#7 0x40030ac4 in pthread_start_thread () from /lib/libpthread.so.0
#8 0x40030ac4 in pthread_start_thread () from /lib/libpthread.so.0
#9 0x40030ac4 in pthread_start_thread () from /lib/libpthread.so.0
(More stack frames follow...)
(gdb) c
Continuing.
Tuner lock OK !
Tuner lock OK !
Tuner lock OK !
Tuner lock OK !
Tuner lock OK !
Tuner lock OK !

Program received signal SIGINT, Interrupt.
0x4007bca0 in __syscall_ipc () from /lib/libc.so.0
(gdb)


小弟刚跨入Linux嵌入式这个行业,还望各位大侠指点。感激不尽。


页首
 用户资料  
 
2 楼 
 文章标题 : Re: malloc阻塞,急啊,搞了半个月了!
帖子发表于 : 2010-12-02 15:48 

注册: 2009-11-25 18:34
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
_receive_data是一个线程专门接受数据的,如果有数据来就根据数据的长度申请一块内存,交给上层使用,上层使用之后会释放掉这块内存。
我看打印栈信息好像是,malloc 里面调用了 phtread_mutex_lock, 然后 phtread_mutex_lock里面调用了 __pthread_acquire, 在__pthread_acquire调用了nanosleep。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: malloc阻塞,急啊,搞了半个月了!
帖子发表于 : 2010-12-02 16:35 

注册: 2009-06-20 23:53
帖子: 490
送出感谢: 3
接收感谢: 0 次
感觉线程互斥锁了。 :em06


页首
 用户资料  
 
4 楼 
 文章标题 : Re: malloc阻塞,急啊,搞了半个月了!
帖子发表于 : 2010-12-03 10:38 

注册: 2009-11-25 18:34
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
看样子是有点像死锁,但是我不知道malloc为什么会出现这种情况呢? :em03


页首
 用户资料  
 
5 楼 
 文章标题 : Re: malloc阻塞,急啊,搞了半个月了!
帖子发表于 : 2010-12-06 8:38 

注册: 2009-11-25 18:34
帖子: 10
送出感谢: 0 次
接收感谢: 0 次
论坛里就没人帮帮我啊? :em20


页首
 用户资料  
 
6 楼 
 文章标题 : Re: malloc阻塞,急啊,搞了半个月了!
帖子发表于 : 2010-12-19 9:02 
头像

注册: 2008-03-25 15:49
帖子: 25878
地址: 谁知道?
送出感谢: 8
接收感谢: 10
太高级。 不懂 :oops:


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 6 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 5 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译