免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5113 | 回复: 16
打印 上一主题 下一主题

free()被mutex锁住的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-05-23 17:07 |只看该作者 |倒序浏览
遇到好几次了,都不知道是为什么,下面是gdb下的stack:
#0  0x00497402 in __kernel_vsyscall ()
#1  0x002e496e in __lll_mutex_lock_wait () from /lib/libc.so.6
#2  0x0027501e in _L_lock_14512 () from /lib/libc.so.6
#3  0x00274544 in free () from /lib/libc.so.6
#4  0x0028a5ff in tzset_internal () from /lib/libc.so.6
#5  0x0028af0d in tzset () from /lib/libc.so.6
#6  0x0028f5a6 in strftime_l () from /lib/libc.so.6
#7  0x002d44cf in __vsyslog_chk () from /lib/libc.so.6
#8  0x002d4997 in vsyslog () from /lib/libc.so.6
#9  0x00269108 in __libc_message () from /lib/libc.so.6
#10 0x00270efd in _int_free () from /lib/libc.so.6
#11 0x00274550 in free () from /lib/libc.so.6
#12 0x0070b082 in syst_IFVlanFree (pstIfVlan=0x971c20 at st_vlan.c:78
#13 0x006f54e0 in syst_LogicalFree (pstLogicInfo=0x971c17 at st_cli.c:6454

下面的是与上面同一个进程中的另一个线程,也被锁住了:
#0  0x00497402 in __kernel_vsyscall ()
#1  0x002e496e in __lll_mutex_lock_wait () from /lib/libc.so.6
#2  0x0027501e in _L_lock_14512 () from /lib/libc.so.6
#3  0x00274544 in free () from /lib/libc.so.6
#4  0x0013f407 in PQclear () from /usr/local/pgsql/lib/libpq.so.5
#5  0x00bf9ada in db_ClearRes (pstDBH=0xb2795580) at db_driver.c:100
#6  0x00bfa25e in db_Exec (pstDBH=0xb2795580, pcSqlStr=0xb1c025e8 "DEALLOCATE
info_devmac2id" at db_driver.c:261

咋回事呢?

论坛徽章:
0
2 [报告]
发表于 2008-05-23 17:14 |只看该作者
在信号处理函数中干什么了?

论坛徽章:
0
3 [报告]
发表于 2008-06-02 14:11 |只看该作者
这样的问题,通常是一个线程进入了信号处理,在信号处理过程中,调用打印语句都可能造成死锁。

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
4 [报告]
发表于 2013-01-07 15:41 |只看该作者
有哪位遇到这种情况解决了,欢迎指教

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
5 [报告]
发表于 2013-01-07 15:57 |只看该作者
你好,关于调用free()的时候,程序停留在__lll_mutex_lock_wait ()的问题,想请教你怎么去思考解决的办法。
有高手告诉我可能是写越界导致的,但我个人觉得如果是写越界,有大量数据输入的情况下,程序应该很快就会挂掉,而且程序不会每次都那麽有规律的停在同一个free()的地方;
听你说大多是因为信号处理导致的,但我现在的程序相比之前的版本,信号处理部分一点都没有修改,之前的版本能运行的很稳定,如果你有处理过这种问题,想向你请教一下方法。
回复 3# Aquester


   

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
6 [报告]
发表于 2013-01-07 16:00 |只看该作者
你好,关于调用free()的时候,程序停留在__lll_mutex_lock_wait ()的问题,想请教你怎么去思考解决的办法。
有高手告诉我可能是写越界导致的,但我个人觉得如果是写越界,有大量数据输入的情况下,程序应该很快就会挂掉,而且程序不会每次都那麽有规律的停在同一个free()的地方;
听你说大多是因为信号处理导致的,但我现在的程序相比之前的版本,信号处理部分一点都没有修改,之前的版本能运行的很稳定,如果你有处理过这种问题,想向你请教一下方法。
回复 2# flw2


   

论坛徽章:
0
7 [报告]
发表于 2013-01-18 17:12 |只看该作者
_nosay 发表于 2013-01-07 15:57
你好,关于调用free()的时候,程序停留在__lll_mutex_lock_wait ()的问题,想请教你怎么去思考解决的办法。 ...


越界也是会造成死锁,原因是将锁的计算数值改了

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
8 [报告]
发表于 2013-01-22 09:13 |只看该作者
嗯,但是太有规律了,我自己想像有两种情况:
① 如果是普通的写越界,打个不形象的比喻,程序执行起来就会像个“疯狂的画家”,到处乱写乱涂,程序不会那麽有规律的每次都被锁在free()里,而且也运行不到三天的时间;
② 如果真的是写越界,那程序仍然是“画家”,但是一个低调、有规律的“画家”,到某个特定的时机时,他会到一个特定的地方点上一笔(即导致free()锁住的那个变量),那麽这个“画家”是什么?这个特定的时机又是什么?
目前,我注释了一些无关紧要的东西,并把整个模块的结构做了一个比较大的改动,程序竟然已经稳定的运行了一个星期了,真无解!
回复 7# Aquester


   

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
9 [报告]
发表于 2013-01-22 15:24 |只看该作者
这个没有具体的场景不好分析啊

论坛徽章:
0
10 [报告]
发表于 2013-01-24 15:14 |只看该作者
_nosay 发表于 2013-01-22 09:13
嗯,但是太有规律了,我自己想像有两种情况:
① 如果是普通的写越界,打个不形象的比喻,程序执行起来就会 ...


有没有,使用valgrind跑一下就知道了,借助工具,可以省去很多力气。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP