※ 引述《[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