免费注册 查看新帖 |

Chinaunix

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

[中断] flush_workqueue之后发现destroy_workqueue长时间被阻塞在那里? [复制链接]

论坛徽章:
1
辰龙
日期:2013-11-28 20:23:14
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-28 20:05 |只看该作者 |倒序浏览
自己创建的工作队列my_wq,往my_wq塞了很多任务。之后使用flush_workqueue清理任务,然后使用destroy_workqueue销毁队列,现在却发现程序卡在这了,不往下运行了?
为什么啊?

论坛徽章:
0
2 [报告]
发表于 2013-11-28 20:17 |只看该作者
我记得最新内核里面destroy_workqueue()会自动flush workqueue,另外你当前destroy_workqueue的地方不会是也在你创建的workqueue里面把  这样会死循环  

论坛徽章:
1
辰龙
日期:2013-11-28 20:23:14
3 [报告]
发表于 2013-11-28 20:23 |只看该作者
感谢回复。
使用内核版本算是比较老了2.6.21,我查看了下源码发现destroy_workqueue也没有调用flush_workqueue
另外我检查了下,没有死锁的情况啊
回复 2# yijing21


   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
4 [报告]
发表于 2013-11-29 08:44 |只看该作者
song0071000 发表于 2013-11-28 20:23
感谢回复。
使用内核版本算是比较老了2.6.21,我查看了下源码发现destroy_workqueue也没有调用flush_workq ...

需要把内核堆栈打出来看看,谢谢!

论坛徽章:
1
辰龙
日期:2013-11-28 20:23:14
5 [报告]
发表于 2013-11-29 10:08 |只看该作者
谢咯。
系统没有崩溃,只是卡在那了。就想阻塞了一样。就是找不到原因
回复 4# humjb_1983


   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
6 [报告]
发表于 2013-11-29 10:36 |只看该作者
song0071000 发表于 2013-11-29 10:08
谢咯。
系统没有崩溃,只是卡在那了。就想阻塞了一样。就是找不到原因
回复 4# humjb_1983

可以用sysrq或是proc将进程的内核态堆栈打出来吧,确认具体阻塞在什么地方了~~

论坛徽章:
1
辰龙
日期:2013-11-28 20:23:14
7 [报告]
发表于 2013-11-29 10:55 |只看该作者
额,忘了说了 这是跑在开发板上的程序。。
destroy_workqueue被阻塞了,也就是说终端被占用了,进行不了任何操作了额。。

回复 6# humjb_1983


   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
8 [报告]
发表于 2013-11-29 12:38 |只看该作者
song0071000 发表于 2013-11-29 10:55
额,忘了说了 这是跑在开发板上的程序。。
destroy_workqueue被阻塞了,也就是说终端被占用了,进行不了任 ...

中断还能响应吧?还能ping通(或者键盘灯还可点亮)?可以的话,可以试试按组合键 alt+sysrq+t,尝试打印所有进程的内核态堆栈。
如果故障可复现,也可以在相关流程中加点打印。

论坛徽章:
17
水瓶座
日期:2013-08-29 12:09:27白羊座
日期:2014-08-07 12:36:42丑牛
日期:2014-07-24 12:44:41寅虎
日期:2014-04-16 16:15:33寅虎
日期:2014-03-12 09:28:43摩羯座
日期:2014-03-06 13:22:04技术图书徽章
日期:2014-03-06 11:34:50天蝎座
日期:2014-01-09 11:31:44寅虎
日期:2013-12-27 17:01:44双子座
日期:2013-12-27 12:32:29双子座
日期:2013-12-25 09:03:33丑牛
日期:2013-12-24 16:18:44
9 [报告]
发表于 2013-11-29 13:04 |只看该作者
串口上使用sysrq的话

minicom用 Ctrl+A+F+t
如果是用的securyCRT,超级终端之类的好像记得是Ctrl+Break+t

好久没用板子了,都记不太清楚了

论坛徽章:
1
辰龙
日期:2013-11-28 20:23:14
10 [报告]
发表于 2013-11-29 16:10 |只看该作者
我仔细看了看。linux2.6.21里面的destory_workqueue还真的自动调用了flush_workqueue。(之前看的是2.6.30的)
程序时序控制没搞好好像。。在flush_workqueue之后仍旧queue_work了任务。
但这会导致destory_workqueue阻塞吗?不至于吧。。。任务不会阻塞,destory_workqueue应该能很快执行完吧。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP