两个 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
处处看到《unix编程艺术》和其同义词内核精益求精的影子。
我不玩魔兽世界,但是觉得它做得很好,比永恒之塔好很多,从编程的角度来说。
突然觉得,在这里魔兽世界是一个敏感话题,但还是说句敏感的话,魔兽世界应该不喜欢自己太多层面的代码被改动,他们应该会给网易发挥的空间留一个限制。又或者是我意想不到的情况。
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
不知道网之易可以参与魔兽中文客户端的修改么,毕竟,暴雪对于小BUG没有网易修改地那么勤快。
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
本人一时兴起来写的博文
《用面向对象的思想探讨游戏“魔兽争霸”(1)》(http://blog.csdn.net/newjueqi/archive/2009/04/10/4063151.aspx),欢迎云风大哥去踩一下
Posted by: newjueqi | (6) April 10, 2009 06:53 PM
good
Posted by: d | (5) April 10, 2009 09:30 AM
我倒有个自认为是绝佳的窗口设计,算抛砖吧
HWND 创建()
{
static HWND h...
if(没创建) 创建
else
return h;
}
template< HWND(*)(void) >
图形API设备 : public 接口1,接口2,接口3...
如此,窗口永远会在被使用前创建
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