☆─────────────────────────────────────☆
lotusin (跟着水木一条道走到黑) 于 (Thu Jan 1 15:20:32 2004) 提到:
libBBS 里面还有一处
【 在 yuhuan.bbs@ytht.net (二月二十一(八)) 的大作中提到: 】
: telnet部分,screen.c中outns函数
: 其中并未进行
: free(foo);
: 由于该泄漏处于显示函数中,且每次至少干掉100个字节,
: 其后果是泄漏速度非常迅速,导致系统内存很快被消耗干净。
: 这一点在站规模较小时可能看不出来。
: 但有实例证明一个4G内存的站点,1000多个telnet在线就足以使系统慢如蜗牛。
: 并且相信内存的耗干对硬盘是个极大的伤害。
: fb2k的内存泄漏并不止这一处,这只是我估计漏的最快的一个。
: 个人建议各位使用fb2k系列代码的该换可以换了。
☆─────────────────────────────────────☆
lepton.bbs@ytht.net (谁给糊涂一点钱) 于 (Thu Jan 1 15:45:45 2004) 提到:
老的FB2000系列有这些毛病
uestc版本的没有
【 在 yuhuan (二月二十一(八)) 的大作中提到: 】
: telnet部分,screen.c中outns函数
: 其中并未进行
: free(foo);
: 由于该泄漏处于显示函数中,且每次至少干掉100个字节,
: 其后果是泄漏速度非常迅速,导致系统内存很快被消耗干净。
: 这一点在站规模较小时可能看不出来。
: 但有实例证明一个4G内存的站点,1000多个telnet在线就足以使系统慢如蜗牛。
: 并且相信内存的耗干对硬盘是个极大的伤害。
: ...................
☆─────────────────────────────────────☆
lepton.bbs@ytht.net (谁给糊涂一点钱) 于 (Thu Jan 1 15:46:00 2004) 提到:
别的没看
【 在 lepton (谁给糊涂一点钱) 的大作中提到: 】
: 老的FB2000系列有这些毛病
: uestc版本的没有
: 【 在 yuhuan (二月二十一(八)) 的大作中提到: 】
: : telnet部分,screen.c中outns函数
: : 其中并未进行
: : free(foo);
: : 由于该泄漏处于显示函数中,且每次至少干掉100个字节,
: : 其后果是泄漏速度非常迅速,导致系统内存很快被消耗干净。
: ...................
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Thu Jan 1 16:10:02 2004) 提到:
刚才仔细看了一下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编译不过,一起改了把~~
【 在 lepton.bbs@ytht.net (谁给糊涂一点钱) 的大作中提到: 】
: 别的没看
: 【 在 lepton (谁给糊涂一点钱) 的大作中提到: 】
: : 老的FB2000系列有这些毛病
: : uestc版本的没有
: : ...................
☆─────────────────────────────────────☆
turbozv.bbs@ytht.net (~~~~) 于 (Thu Jan 1 16:11:53 2004) 提到:
【 在 yuhuan (二月二十一(八)) 的大作中提到: 】
: 标 题: fb2k系列代码存在严重内存泄漏
: 发信站: 一塌糊涂 BBS (Thu Jan 1 15:13:09 2004), 转信(ytht.net)
:
: telnet部分,screen.c中outns函数
: 其中并未进行
: free(foo);
:
: 由于该泄漏处于显示函数中,且每次至少干掉100个字节,
: 其后果是泄漏速度非常迅速,导致系统内存很快被消耗干净。
: 这一点在站规模较小时可能看不出来。
: 但有实例证明一个4G内存的站点,1000多个telnet在线就足以使系统慢如蜗牛。
~~~~~~~~~~ 这个难道说的是bbs.p*u?汗~
: 并且相信内存的耗干对硬盘是个极大的伤害。
:
: fb2k的内存泄漏并不止这一处,这只是我估计漏的最快的一个。
: 个人建议各位使用fb2k系列代码的该换可以换了。
~~~~~~~~~~~ 这个,这个... 反正大家都是fb改过来的, 只是一个快一个慢啦~
现在fb的用户就当练手吧, 找bug也是一种乐趣啦:) 呵呵~~
:
: --
:
: Real Programmers never work 9 to 5. If any Real Programmers are
: around at 9 AM, it's because they were up all night.
:
: ※ 来源:.一塌糊涂 BBS ytht.net.[FROM: 162.105.69.228]
☆─────────────────────────────────────☆
yuhuan.bbs@ytht.net (二月二十一(八)) 于 (Thu Jan 1 17:28:36 2004) 提到:
这个 while 效率太低了
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 刚才仔细看了一下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;
: ...................
☆─────────────────────────────────────☆
turbozv.bbs@ytht.net (~~~~) 于 (Thu Jan 1 17:36:11 2004) 提到:
可以怎么改呢?
因为fb原来outs有那个代码.hoho~ 直接用了
【 在 yuhuan (二月二十一(八)) 的大作中提到: 】
: 这个 while 效率太低了
: 【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: : 刚才仔细看了一下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, ...)
: : {
: ...................
☆─────────────────────────────────────☆
yuhuan.bbs@ytht.net (二月二十一(八)) 于 (Thu Jan 1 17:37:35 2004) 提到:
总觉得这样岂不是一直在做循环计数?
【 在 turbozv (~~~~) 的大作中提到: 】
: 可以怎么改呢?
: 因为fb原来outs有那个代码.hoho~ 直接用了
: 【 在 yuhuan (二月二十一(八)) 的大作中提到: 】
: : 这个 while 效率太低了
: : ...................
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Fri Jan 2 14:06:56 2004) 提到:
//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 (二月二十一(八)) 的大作中提到: 】
: 总觉得这样岂不是一直在做循环计数?
: 【 在 turbozv (~~~~) 的大作中提到: 】
: : 可以怎么改呢?
: : 因为fb原来outs有那个代码.hoho~ 直接用了
☆─────────────────────────────────────☆
yuhuan.bbs@ytht.net (二月二十一(八)) 于 (Fri Jan 2 14:07:23 2004) 提到:
因为你看错地方了,ytht的screen.c并没有被使用
使用的是smth_screen.c
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: //code from ytht
: void
: outs(str)
: char *str;
: {
: register int i;
: while (*str) {
: if (*str != '\t')
: ...................
☆─────────────────────────────────────☆
TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 于 (Fri Jan 2 14:19:04 2004) 提到:
看了一下smth_screen.c, hoho 那个outns写得.... 没得说~~ (好长~~):)
把outc的东西全部拿进来全局上优化处理了.
我干脆也copy算啦:)
【 在 yuhuan.bbs@ytht.net (二月二十一(八)) 的大作中提到: 】
: 因为你看错地方了,ytht的screen.c并没有被使用
: 使用的是smth_screen.c
: 【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: : //code from ytht
: : void
: : outs(str)
: : char *str;
: : {
: : register int i;
: : while (*str) {
: .................(以下省略)
☆─────────────────────────────────────☆
rwayan.bbs@bbs.seu.edu.cn (技术只是生活的一部分) 于 (Fri Jan 2 14:35:22 2004) 提到:
弄好了贴个指南
我也要用
我现在就跟着抄抄就好
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 看了一下smth_screen.c, hoho 那个outns写得.... 没得说~~ (好长~~):)
: 把outc的东西全部拿进来全局上优化处理了.
: 我干脆也copy算啦:)
: 【 在 yuhuan.bbs@ytht.net (二月二十一(八)) 的大作中提到: 】
: : 因为你看错地方了,ytht的screen.c并没有被使用
: .................(以下省略)
☆─────────────────────────────────────☆
yuhuan.bbs@ytht.net (二月二十一(八)) 于 (Fri Jan 2 14:36:20 2004) 提到:
这个和水母用的也不太一样
从水母某个版本改来的
【 在 TurboZV.bbs@bbs.uestc.edu.cn (重构中……) 的大作中提到: 】
: 看了一下smth_screen.c, hoho 那个outns写得.... 没得说~~ (好长~~):)
: 把outc的东西全部拿进来全局上优化处理了.
: 我干脆也copy算啦:)
: 【 在 yuhuan.bbs@ytht.net (二月二十一(八)) 的大作中提到: 】
: : 因为你看错地方了,ytht的screen.c并没有被使用
: : 使用的是smth_screen.c
: : .................(以下省略)
FROM 162.105.69.228