荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: AM (头发好短了:P), 信区: InstallBBS
标  题: [合集]fb2k系列代码存在严重内存泄漏
发信站: 荔园晨风BBS站 (Mon Jan 26 21:37:30 2004), 站内信件

yuhuan.bbs@ytht.net (二月二十一(八)) 于Thu Jan  1 15:13:09 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

telnet部分,screen.c中outns函数
其中并未进行
free(foo);

由于该泄漏处于显示函数中,且每次至少干掉100个字节,
其后果是泄漏速度非常迅速,导致系统内存很快被消耗干净。
这一点在站规模较小时可能看不出来。
但有实例证明一个4G内存的站点,1000多个telnet在线就足以使系统慢如蜗牛。
并且相信内存的耗干对硬盘是个极大的伤害。

fb2k的内存泄漏并不止这一处,这只是我估计漏的最快的一个。
个人建议各位使用fb2k系列代码的该换可以换了。


lepton.bbs@ytht.net (谁给糊涂一点钱) 于Thu Jan  1 15:45:45 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

老的FB2000系列有这些毛病
uestc版本的没有

lepton.bbs@ytht.net (谁给糊涂一点钱) 于Thu Jan  1 15:46:00 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

别的没看

TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于Thu Jan  1 16:10:02 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.uestc.edu.cn!UESTC

刚才仔细看了一下FB1126, FB1219, FB1.0909都有.看来是全系列得 -_-|||

其实fb那个outns是只给prints用的,而prints自己解析那么多格式化字符真是麻烦
要是不考虑移植的smth的killer/friendtest, or ytht的mmap的more.c 去掉得了.
而把prints改成下边得样子得了 ( gcc3.3不再支持以前那种va_arg之类得方法了 )

void prints(register char *fmt, ...)
{
    static char buf[512];
    va_list ap;
    register char *str;

    va_start(ap, fmt);
    vsnprintf(buf, 511, fmt, ap);
    va_end(ap);
    buf[511] = '\0';

    str = buf;
    while (*str != '\0')
        outc(*str++);
}

PS: innbbsd得代码全部用va_arg之类,所以gcc-3.3编译不过,一起改了把~~



turbozv.bbs@ytht.net (~~~~) 于Thu Jan  1 16:11:53 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

~~~~~~~~~~ 这个难道说的是bbs.p*u?汗~
~~~~~~~~~~~ 这个,这个... 反正大家都是fb改过来的, 只是一个快一个慢啦~
            现在fb的用户就当练手吧, 找bug也是一种乐趣啦:) 呵呵~~


yuhuan.bbs@ytht.net (二月二十一(八)) 于Thu Jan  1 17:28:36 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

这个 while 效率太低了

turbozv.bbs@ytht.net (~~~~) 于Thu Jan  1 17:36:11 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

可以怎么改呢?
因为fb原来outs有那个代码.hoho~ 直接用了


yuhuan.bbs@ytht.net (二月二十一(八)) 于Thu Jan  1 17:37:35 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

总觉得这样岂不是一直在做循环计数?


TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于Fri Jan  2 14:06:56 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.uestc.edu.cn!UESTC

//code from ytht
void
outs(str)
char *str;
{
    register int i;
    while (*str) {
        if (*str != '\t')
            outc(*str++);
        else {
            i = (cur_col + 8) / 8 * 8 - cur_col;
            while (i > 0) {
                outc(' ');
                i--;
            }
            str++;
        }
    }
}

我们不是一样的嘛? -_-|||



yuhuan.bbs@ytht.net (二月二十一(八)) 于Fri Jan  2 14:07:23 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

因为你看错地方了,ytht的screen.c并没有被使用
使用的是smth_screen.c

TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于Fri Jan  2 14:19:04 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.uestc.edu.cn!UESTC

看了一下smth_screen.c, hoho 那个outns写得.... 没得说~~ (好长~~):)
把outc的东西全部拿进来全局上优化处理了.

我干脆也copy算啦:)



yuhuan.bbs@ytht.net (二月二十一(八)) 于Fri Jan  2 14:36:20 2004)
提到:
转信站: SZU!news.ccie.net.cn!news.happynet.org!YTHT

这个和水母用的也不太一样
从水母某个版本改来的


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店