![]() |
![]() |
#1 |
高级会员
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() 注册: 08年04月11日
来自: 盘丝洞
帖子: 311
声望力: 20
声望:
50
![]() 现金:29两梁山币
资产:1245两梁山币
致谢数: 0
获感谢文章数:0
获会员感谢数:0 |
destruct带来的BUG
发信人: puss (幽幽一猫无心细语), 信区: wiz 标 题: MUD一个普遍存在的BUG(转) 发信站: 西北网络中心兵马俑 BBS 站 (Sun May 30 03:44:12 1999) MUD一个普遍存在的BUG 作者:文月 升级MUD OS之后,在老的MUD OS中遇到的CRASH 系统的BUG总算体现出来了。 我发现有个BUG大部分的MUD都存在,只是有的MUD没体现出来。BUG出现 在start_ busy上,start_busy的参数中有两个是函数指针,最典 型的就是dazuo & tuna命令了。一般而言,由于start_busy在不停地 调用dazuo/tuna命令中的函数,这样dazuo/tuna并不会被自动destruct, 但是有一种特殊情况就是当player正在打坐的时候而断线,一直到player重新连线进 入的这段时间内,如果没有其他的PLAYER用到这个命令而 导致该命令被自动destruct,这个时候,player重新连入,使用halt 命令会调用到interrupt_me,interrupt_me则会调用已经被destrcu的 命令内的函数在v21里,会导致crash,在v22里则体现为无心跳。此类bug在一些特殊 的skill/skill's perform里也有可能碰到。 最简单的解决办法就是将这些可能引起bug的程序中的inherit F_CLEAN_UP去掉。 此外,如果要彻底解决这个问题(例如wizard使用update会导致同样的问题), 最好是在这些使用了用函数指针作为参数调用start_busy 的程序内加上remove函数,例如dazuo,可以在其remove函数里寻找所有的正在打坐 的 player并调用其interrupt_me函数。 |
![]() |
![]() |