返回信息流转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
./miscd killuser
Segmentation fault
不知道为什么, 我这里bbs启动都没有问题,查询用户也没问题,flush也可以,但是就是killuser不行:
Breakpoint 1, main (argc=2, argv=0xbfa342c4) at miscd.c:687
687 if (strcasecmp(argv[1], "killuser") == 0) {
(gdb) n
688 if (resolve_ucache() != 0)
(gdb) n
690 return dokilluser();
(gdb) s
dokilluser () at miscd.c:165
165 newbbslog(BBSLOG_USIES, "Started kill users\n");
(gdb) n
166 apply_users(killauser, NULL);
(gdb) s
apply_users (func=0x804aa62 <killauser>, arg=0x0) at ucache.c:773
773 for(count=0,i=0;i<uidshm->number;i++){
(gdb) n
774 if(func){
(gdb)
775 switch((*func)(&uidshm->passwd[i],arg)){
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x08059258 in apply_utmp (fptr=0x80598b9 <kickuser_count>, maxcount=0, userid=0xb6a116c4 "sabbath", arg=0xbfa34144)
at utmp.c:555
555 i = utmphead->hashhead[hashkey];
这是一条镜像帖。来源:北邮人论坛 / bbs-man-dev / #5706同步于 1 周前
BBSMan_Dev机器人发帖
miscd killuser出现问题
luckwithme.
1 周前镜像同步17 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
我再进一步调试是到了utmp.c
这个是怎么回事呢?共享内存访存冲突?
Breakpoint 4, apply_utmp (fptr=0x80598b9 <kickuser_count>, maxcount=0, userid=0xb6af46c4 "sabbath", arg=0xbfddc4f4)
at utmp.c:553
553 num = 0;
(gdb) n
554 hashkey = utmp_hash(userid);
(gdb)
555 i = utmphead->hashhead[hashkey];
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x08059258 in apply_utmp (fptr=0x80598b9 <kickuser_count>, maxcount=0, userid=0xb6af46c4 "sabbath", arg=0xbfddc4f4)
at utmp.c:555
555 i = utmphead->hashhead[hashkey];
(gdb) p hashkey
$16 = 9340
(gdb) p utmphead->hashhead[hashkey]
Cannot access memory at address 0xc0f8
【 在 luckwithme (Marvel) 的大作中提到: 】
: ./miscd killuser
: Segmentation fault
: 不知道为什么, 我这里bbs启动都没有问题,查询用户也没问题,flush也可以,但是就是killuser不行:
: ...................
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
这个站点是测试用得,用户数据不一定全,测试用到的几个用户的home和mail都有,其他都没有放进去,不过这个问题应该不大吧
utmp是登录信息,这个怎么会出现这种访问错误呢?
【 在 luckwithme (Marvel) 的大作中提到: 】
: 我再进一步调试是到了utmp.c
: 这个是怎么回事呢?共享内存访存冲突?
: Breakpoint 4, apply_utmp (fptr=0x80598b9 <kickuser_count>, maxcount=0, userid=0xb6af46c4 "sabbath", arg=0xbfddc4f4)
: ...................
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
【 在 luckwithme (Marvel) 的大作中提到: 】
: 这个站点是测试用得,用户数据不一定全,测试用到的几个用户的home和mail都有,其他都没有放进去,不过这个问题应该不大吧
: utmp是登录信息,这个怎么会出现这种访问错误呢?
: 其中
: 88 #define MAXUSERS 40000
: 89 #define MAXCLUB 1024
: 90 #define MAXBOARD 1024
: 91 #define MAXACTIVE 3000
: 3000确实比9340大了,但是这是怎么回事呢
-_- 问你自己啊 ... 你是从别的正常站挪过来的?
原来什么样?
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
我们站也曾出现过杀人程序中断的情况,忘了当时怎么搞定的了。。
【 在 fancyrabbit (兔兔猫★Initial F★Changing ...) 的大作中提到: 】
: -_- 问你自己啊 ... 你是从别的正常站挪过来的?
: 原来什么样?
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
你改过 MAXACTIVE 么,改过以后有没有全部make; make install然后完全重启动
【 在 luckwithme (Marvel) 的大作中提到: 】
: 这个站点是测试用得,用户数据不一定全,测试用到的几个用户的home和mail都有,其他都没有放进去,不过这个问题应该不大吧
: utmp是登录信息,这个怎么会出现这种访问错误呢?
: 其中
: 88 #define MAXUSERS 40000
: 89 #define MAXCLUB 1024
: 90 #define MAXBOARD 1024
: 91 #define MAXACTIVE 3000
: 3000确实比9340大了,但是这是怎么回事呢
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
没有改过
如何在gdb中attach进程后查看MAXACTIVE的值是多少?呵呵
【 在 atppp (Big Mouse) 的大作中提到: 】
: 你改过 MAXACTIVE 么,改过以后有没有全部make; make install然后完全重启动
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
确实是从smth1.2升级过来的,不过site/xxx.h文件没有动过,一直就是上面的那个
40000/3000,而且以前一切都运行正常,只不过加了SAVELIFE的宏定义,现在准备杀用户,
去掉之后就有问题了……
我找了一下
MAXACTIVE是3000
USHM_SIZE (MAXACTIVE + 10)是3010
UTMP_HASHSIZE (USHM_SIZE*4)是12040>9340应没问题
问题貌似出在这里:
Program received signal SIGSEGV, Segmentation fault.
0x08059258 in apply_utmp (fptr=0x80598b9 <kickuser_count>, maxcount=0, userid=0xb6a7dbf8 "fhm", arg=0xbfde9504)
at utmp.c:555
555 i = utmphead->hashhead[hashkey];
(gdb) p i
$13 = -20
(gdb) p hashkey
$14 = 7383
(gdb) p utmphead->hashhead
Cannot access memory at address 0x2f08
(gdb) p utmphead
$15 = (struct UTMPHEAD *) 0x0
hashhead为什么无法访问呢?
【 在 fancyrabbit (兔兔猫★Initial F★Changing ...) 的大作中提到: 】
: 标 题: Re: miscd killuser出现问题
: 发信站: 水木社区 (Thu Feb 28 23:08:39 2008), 转信
:
:
: 【 在 luckwithme (Marvel) 的大作中提到: 】
: : 这个站点是测试用得,用户数据不一定全,测试用到的几个用户的home和mail都有,其他都没有放进去,不过这个问题应该不大吧
: : utmp是登录信息,这个怎么会出现这种访问错误呢?
: : 其中
: : 88 #define MAXUSERS 40000
: : 89 #define MAXCLUB 1024
: : 90 #define MAXBOARD 1024
: : 91 #define MAXACTIVE 3000
: : 3000确实比9340大了,但是这是怎么回事呢
: -_- 问你自己啊 ... 你是从别的正常站挪过来的?
: 原来什么样?
:
: --
:
转信站: BYR!news.byr.edu.cn!news.newytht.net!news.newsmth.net!NEWSMTH
会不会是没有resolve_utmp的关系?
直接用miscd killuser有这个问题?
【 在 luckwithme (Marvel) 的大作中提到: 】
: 确实是从smth1.2升级过来的,不过site/xxx.h文件没有动过,一直就是上面的那个
: 40000/3000,而且以前一切都运行正常,只不过加了SAVELIFE的宏定义,现在准备杀用户,
: 去掉之后就有问题了……
: ...................
转信站: BYR!news.byr.edu.cn!news.pigpark.net!news.newytht.net!news.newsmth.net!
我想是不是这样的,如果miscd daemon启动的话,在miscd_dodaemon中有:
568 resolve_boards();
569 resolve_utmp();
570 resolve_guest_table();
所以没问题,但是如果单独命令行执行miscd killuser的话,貌似从
main->dokilluser->killauser->kick_user_utmp->apply_utmp
都没有resove_utmp(),所以这样会出错
//可能大家都是默认的daemon启动杀用户,所以都没有遇到这个问题,我猜的对吗,呵呵
【 在 luckwithme (Marvel) 的大作中提到: 】
: 会不会是没有resolve_utmp的关系?
: 直接用miscd killuser有这个问题?
: 我看了smth1.2的代码,其中没有出问题的那句kick_user_utmp(getuser(theuser->userid, NULL), NULL, SIGKILL);
: ...................