两个 bug
今天查出两个 bug ,都很典型。值得记录,警示后人。
其一是,我们的编辑器服务器的数据储存部分,采用向一个文件追加的方式,保证数据不丢失,同时用一个 index 文件记录每个数据的最新版本在这个数据文件中的偏移量,加快检索。
实现的时候,考虑过数据文件过大(比如超过 4G)的情况。但是由于疏忽,index 里的偏移量全部用的 32bit 而不是 64bit 。结果在服务器工作了很久后,终于碰上了溢出,index 文件损坏。
后果倒不严重,重建一下索引即可。
其二是,前段时间改进了 client engine 的初始化流程。
因为 opengl 模块的初始化需要有窗口先创建出来,而窗口的创建跟逻辑又有关系。以前一直设计的不好。(没有做到沉默的把事情做完)
为了让模块初始化过程内聚性更高。我换用了一个简单的办法。无论用户有没有创建窗口,都先创建一个假窗口,先把 opengl 初始化好。待到用户自定义窗口的时候,再销毁掉假窗口,换成新的。
由于失误,这个过程中把 opengl 的 context 也删除了。
正确的做法是,先创建的假窗口可以销毁,但是不能销毁 opengl 的 context ,而是把以前创建好的 context 切换到新的窗口上即可。
解决起来很简单,但是这个问题很隐蔽,平时没发现,直到今天才暴露。我在用户自定义窗口创建出来前,构造了几个 opengl 对象,随着 opengl context 一起删除了。因为 opengl 的 handle 都是整数,新创建出来的 context 里也有这几个 handle ,程序没有崩溃,只是显示不正常而已。
Comments
Posted by: archerk | (13) April 29, 2009 03:42 PM
Posted by: nothanks | (12) April 18, 2009 02:07 PM
Posted by: 不空 | (11) April 17, 2009 03:41 PM
Posted by: 314159 | (10) April 17, 2009 02:16 PM
Posted by: face | (9) April 16, 2009 08:25 PM
Posted by: mm | (8) April 16, 2009 08:24 PM
Posted by: yayv | (7) April 12, 2009 09:56 AM
Posted by: newjueqi | (6) April 10, 2009 06:53 PM
Posted by: d | (5) April 10, 2009 09:30 AM
Posted by: black | (4) April 9, 2009 08:02 PM
Posted by: mm | (3) April 9, 2009 05:41 PM
Posted by: goldou | (2) April 9, 2009 04:14 PM
Posted by: chu | (1) April 9, 2009 10:35 AM