malloc阻塞,急啊,搞了半个月了!

为当前最终发行版之前的所有版本提供支持
回复
cloudyang2009
帖子: 10
注册时间: 2009-11-25 18:34
送出感谢: 0
接收感谢: 0

malloc阻塞,急啊,搞了半个月了!

#1

帖子 cloudyang2009 » 2010-12-02 15:44

各位大侠,小弟最近在弄一个嵌入式开发,交叉编译工具是 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嵌入式这个行业,还望各位大侠指点。感激不尽。
cloudyang2009
帖子: 10
注册时间: 2009-11-25 18:34
送出感谢: 0
接收感谢: 0

Re: malloc阻塞,急啊,搞了半个月了!

#2

帖子 cloudyang2009 » 2010-12-02 15:48

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

Re: malloc阻塞,急啊,搞了半个月了!

#3

帖子 风间星魂 » 2010-12-02 16:35

感觉线程互斥锁了。 :em06
cloudyang2009
帖子: 10
注册时间: 2009-11-25 18:34
送出感谢: 0
接收感谢: 0

Re: malloc阻塞,急啊,搞了半个月了!

#4

帖子 cloudyang2009 » 2010-12-03 10:38

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

Re: malloc阻塞,急啊,搞了半个月了!

#5

帖子 cloudyang2009 » 2010-12-06 8:38

论坛里就没人帮帮我啊? :em20
头像
pocoyo
论坛版主
帖子: 25878
注册时间: 2008-03-25 15:49
来自: 谁知道?
送出感谢: 5 次
接收感谢: 9 次
联系:

Re: malloc阻塞,急啊,搞了半个月了!

#6

帖子 pocoyo » 2010-12-19 9:02

太高级。 不懂 :oops:
回复

回到 “老旧版本支持”