|
阅读:1105回复:5
Fedora GNOME 锁住CD-ROM BUG 详解-中级编程课:)
Fedora GNOME 经常锁住U盘CD-ROM等,Fedora mail-list上的方法也很糟.
这可是一个中极难度BUG,查起来有点难度,记录下来供各位参考:) 我也试验了一下,的确在U盘上打开几个文件后就退不出来,这时用系统监视器逐个杀进程,杀到gnome-panel时,盘可以退出.问题在这. 检查gnome-panel除了Recent Documents Menu会会有关,其它的应当不会有问题. 从ftp.gnome.org下gnome-panel-2.4.1.tar.bz2重新建rpm包,仍然有问题. 检查源码,grep "recent" * -r,发现在gnome-panel目录下有若干文件与此有关,从文件名上看egg-recent-*.c于此有关,MCV是大多数编程模式,选定gnome-recent-model.c进行分析. 首先按一般编程规则进行配对检查(alloc->free对 fopen->close对),发现有如下错误 FILE *file; uri = egg_recent_item_get_uri (item); // 打开~/.recently-used文件, comment by kmwang. if (egg_recent_model_lock_file (file)) { //对该文件上锁, comment by kmwang. ... } else { g_warning ("Failed to lock: %s", strerror (errno)); return FALSE; } ... fclose(file); ... 难到对文件上锁后就直接返回不用对file进行close吗,真怀疑谭浩强的c已经打开了国际市场.但这不是真正的问题所在,但对作者的编程休养产生怀疑. 继续查找,这段程序用到了gnome-vfs,再干吗?,1)监视~/.recently-used,2)监视recent-document列表中的所有文件,如果文件被更改,则从recent-document list中删除,问题就在这,为什么要对它们进行监视,也不应当删除,想毁尸灭迹吗! 在egg_recent_model_monitor_list函数的最前面加一句return;让函数失效. 重新建造rpm包. 由于nautilus中也有recent-document类似的功能,对其进行检查.到ftp.gnome.org下nautilus-2.4.1.tar.bz2, eel-2.4.1.tar.bz2,查看其ChangeLog,发现eel-cavase中对像素计算误差进行了修正,这应当是nautilus中刷屏不干净的病根,为保险,还是保留了我的patch. grep "gnome_vfs_monitor_add" * -r, 发现nautilus也用到了egg代码,看了一下,哈哈,已经把egg_recent_model_monitor_list这些函数给注释掉了.不果nautilus 2.4.1中修正了不少BUG,重新建rpm包,安装, 另外pam-panel-icon也不怎么样,怀疑他有问题,在session中将其卸载. 运行,胡乱点一大堆文件,下盘上盘,一切OK. |
|
|
1C#
发布于:2004-11-14 16:06
Re:Fedora GNOME 锁住CD-ROM BUG 详解-中级编程课:)
.......やだ[em093] -------------------- [a=http://go2west.512j.com/]西へ·独自旅行人のBLOG[/a] |
|
|
|
2C#
发布于:2003-11-18 22:28
Re: Fedora GNOME 锁住CD-ROM BUG 详解-中级编程课:)
本来以为Nautilus中的也是一一般错误,trace了一下,还真不简单,这个功能也太常用了,顺手解决了一把.
问题出在nautilus-notes和fm-properties-window中,就是最后哪个Notes页,用的是bonobo实现的,由于nautilus一直运行,destory消息无法在关闭窗口时传递到nautilus-notes中,需要更改一下结构.在窗口关闭时传递一空的文件表,并修改nautilus-notes让它把占用的资源释放.另外fm-properties-window还有一处有内存泄漏:( |
|
|
3C#
发布于:2003-11-17 09:43
Re: Fedora GNOME 锁住CD-ROM BUG 详解-中级编程课:)
好厉害!其实都是标准的调试方法,我们怎么就想不到呢?
PS: 那天回去忘了pam-panel-icon的名字,于是,挨个试了一把!也过一下kill的瘾! |
|
|
4C#
发布于:2003-11-16 21:20
Re: Fedora GNOME 锁住CD-ROM BUG 详解-中级编程课:)
我们这个专业就象一个大游戏,我只能告诉你故事梗概和一些攻略秘籍,游戏吗还得自己打.
DEBUG类似RPG,这个例子比较特殊,不能用debug工具,没用,只能硬查,查找过程很有点意思. 另外,nautilus还有一个bug也会造成cd-rom退不出来,就是对cd-rom上的一目录看它的属性以后,肯定退不出来,不知道谁有兴趣查查:). aph用了几天就发现是fam捣乱,很不错.gnome_vfs_monitor_*函数正是用fam实现文件更改通知的:) |
|
|
5C#
发布于:2003-11-15 15:37
Re: Fedora GNOME 锁住CD-ROM BUG 详解-中级编程课:)
不知所云。深表关切。可否细说。不胜感激。
--------------------
莫愁前路无知已,天下谁人不识君 |
|
|