diff options
author | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2006-04-01 22:28:03 +0800 |
---|---|---|
committer | kcwu <kcwu@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2006-04-01 22:28:03 +0800 |
commit | 68fb6de868a5e0daf128998cd60fe582f02dc287 (patch) | |
tree | 596b1a65c0ecf13b99408189fed9ccd2e4b45c64 /mbbsd/talk.c | |
parent | fad5640e3ae7686f60becbb1130b9fd1f59c37d6 (diff) | |
download | pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.gz pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.bz2 pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.lz pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.xz pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.tar.zst pttbbs-68fb6de868a5e0daf128998cd60fe582f02dc287.zip |
make it harder to multi-login by race condition.
prevent logout function reenter.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@3319 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'mbbsd/talk.c')
-rw-r--r-- | mbbsd/talk.c | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/mbbsd/talk.c b/mbbsd/talk.c index abfd0e52..cde23af9 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -265,16 +265,19 @@ int sync_outta_server(int sfd) if(res<0) return -1; if(res==2) { + close(sfd); outs("登入太頻繁, 為避免系統負荷過重, 請稍後再試\n"); refresh(); - sleep(10); - abort_bbs(0); + sleep(30); + log_usies("REJECTLOGIN", NULL); + memset(currutmp, 0, sizeof(userinfo_t)); + exit(0); } verbose_progress(0, &iBar, &dir, barMax); if(toread(sfd, &nfs, sizeof(nfs))<0) return -1; - if(nfs<0 || nfs>=MAX_FRIEND) { + if(nfs<0 || nfs>MAX_FRIEND*2) { fprintf(stderr, "invalid nfs=%d\n",nfs); return -1; } @@ -282,6 +285,8 @@ int sync_outta_server(int sfd) if(toread(sfd, fs, sizeof(fs[0])*nfs)<0) return -1; + close(sfd); + verbose_progress(0, &iBar, &dir, barMax); for(i=0; i<nfs; i++) { if( SHM->uinfo[fs[i].index].uid != fs[i].uid ) @@ -317,9 +322,9 @@ void login_friend_online(void) sfd = toconnect(OUTTACACHEHOST, OUTTACACHEPORT); if(sfd>=0) { int res=sync_outta_server(sfd); - close(sfd); - if(res==0) + if(res==0) // sfd will be closed if return 0 return; + close(sfd); } #endif |