Qt主线程卡死,竟然与X11 的 _XReply() 有关

在ubuntu系统下运行Qt程序

Qt的程序就相当于X11的一个客户端,受X11的限制

 

近期,在处理一起离奇事件,发现UI的qt界面已经卡死了,无鼠标键盘任何反应

但程序是运行的,比如与其他设备通信是正常的,说明程序本身没有死掉。

通过断点,发现所有的槽均失效了

 

如果重启应用程序,可以恢复正常的。

出现的概率不大,但总能出来,总的来说是没有找到规律。

 

一开始,一直怀疑程序本身代码出现出现,比如槽函数里出现死循环等,因为这样比较适合解释现象。

 

当出现问题的时候,通过GDB调试,发现x11卡在某个函数地方Qt主线程卡死,竟然与X11 的 _XReply() 有关

 

 

 

提示:libX11.so.6  _XReply()

 

百思不得其解

 

难不成X11的bug?

从现象看,的确存在漏洞,x11会出现死等的情况

 

因此,解决办法:

1. 去x11网站看看,有没有类似问题,的确也有,已经在下一个版本上解决了,正好,拿来编译下,替换掉原先的,发现问题的确再也不出现了

2. 自己修改x11的源码,也是可以的,就是把wait那个地方改成不要死等,就可以了

 

mark一下

 

上一篇:【smbms1】登陆操作实现过程


下一篇:smbms超市管理系统之登录(查询)