看板PttCurrent
标 题Re: [讨论] rev2738
发信站HKDAY (Wed Jun 1 13:10:00 2005)
转信站ptt!Group.NCTU!grouppost!Group.NCTU!hkday
※ 引述《[email protected] (於是我开始等你)》之铭言:
: 确实, check_newpost() 中不该动到 lastposttime[] 的
: 可是 code 会这样写似乎是预防记忆体烂掉, SHM 里的东西总是...
这样子说, 不是太怪了吗? lastposttime 被动到的情况很有限, 要不是被
set 作 0 , 就是 setbtotal 的场合 :
SHM->lastposttime[bid - 1] = (time_t) atoi(&genbuf[2]);
如果要烂掉, 似乎有三个可能,
a) 外部因素, 比如其他地方出现 buffer overflow, 或 mbbsd 以外的东西爆炸.
b) 内部因素, 比如 &genbuf[2] 读入一堆奇怪的数字
c) check_newpost 时 set 了做莫名其妙的东西.
当中, 以 c 发生的机率最高.
: 我在实际 log 不少资料後发现, ftime > now 时,
: 大部份的情况下 ftime 和 now 的差距在十以下,
等一下, 我得提醒你, include.h/var.h: extern time_t now;
也不是善男信女乖小孩, ctime(&now) 虽然不时有被 call, 但有有时不知
是个甚麽.
其他程序也太滥用 now 了.
: 但是少数情况却高达一百多, 这就不像单纯 innbbsd 的问题了
例如站内转信, 又例如某些变态的内部 post 文方法.
(我常被骂引用 util 的怪东西..)
: 所以我会这样改的想法是, 十以下算常见的 case, 我们也知道那是正确的
: 所以就让他过去, 但是其他情况下当他是烂的.
试试开一个 stat 统计一下烂掉 (ftime > now) 的频率 ?
但必须注意 now 到底是甚麽. 如果 ftime 很乖, 但 now 是一个死小孩,
那很容易会杀错良民.
--
※ 发信站: 香港地(hkday.net)
◆ From: 61.238.143.229