« 为 lua 插件提供一个安全的环境 | 返回首页 | 为什么说不要编写庞大的程序 »

两个 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编程艺术》和其同义词内核精益求精的影子。 我不玩魔兽世界,但是觉得它做得很好,比永恒之塔好很多,从编程的角度来说。 突然觉得,在这里魔兽世界是一个敏感话题,但还是说句敏感的话,魔兽世界应该不喜欢自己太多层面的代码被改动,他们应该会给网易发挥的空间留一个限制。又或者是我意想不到的情况。
云风必然去开会去了...
怎么可能让网易的人接触到源码呢?
不知道网之易可以参与魔兽中文客户端的修改么,毕竟,暴雪对于小BUG没有网易修改地那么勤快。
听说网易拿了魔兽的代理,不知道云风有什么评论没有
网易代理了魔兽,这回云风天才可以尽情发挥技术优势了。。。。
牛人就是用尽可能简单直白的方法解决各种复杂的问题
本人一时兴起来写的博文 《用面向对象的思想探讨游戏“魔兽争霸”(1)》(http://blog.csdn.net/newjueqi/archive/2009/04/10/4063151.aspx),欢迎云风大哥去踩一下
good
我倒有个自认为是绝佳的窗口设计,算抛砖吧 HWND 创建() { static HWND h... if(没创建) 创建 else return h; } template 图形API设备 : public 接口1,接口2,接口3... 如此,窗口永远会在被使用前创建
终于知道什么是牛人了。
编辑器数据量可真够大的。
学习了

Post a comment

非这个主题相关的留言请到:留言本