diff options
author | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-02-11 01:41:45 +0800 |
---|---|---|
committer | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2003-02-11 01:41:45 +0800 |
commit | 21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db (patch) | |
tree | 028cfb28e049768434832fd6c9301278be03cdab | |
parent | 60e0f10f5a60bac35a3de3697e957319e7b5ddc1 (diff) | |
download | pttbbs-21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db.tar pttbbs-21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db.tar.gz pttbbs-21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db.tar.bz2 pttbbs-21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db.tar.lz pttbbs-21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db.tar.xz pttbbs-21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db.tar.zst pttbbs-21ff1ecf3d29680e3d26113eb7caf9f55f0ba5db.zip |
lazy sort utmp
git-svn-id: http://opensvn.csie.org/pttbbs/pttbbs/trunk/pttbbs@653 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | include/pttstruct.h | 6 | ||||
-rw-r--r-- | mbbsd/Makefile | 4 | ||||
-rw-r--r-- | mbbsd/cache.c | 3 | ||||
-rw-r--r-- | mbbsd/mbbsd.c | 3 | ||||
-rw-r--r-- | util/shmctl.c | 15 |
5 files changed, 23 insertions, 8 deletions
diff --git a/include/pttstruct.h b/include/pttstruct.h index 12054171..898d4447 100644 --- a/include/pttstruct.h +++ b/include/pttstruct.h @@ -1,4 +1,4 @@ -/* $Id: pttstruct.h,v 1.28 2003/01/24 14:41:19 in2 Exp $ */ +/* $Id: pttstruct.h,v 1.29 2003/02/10 17:41:45 in2 Exp $ */ #ifndef INCLUDE_STRUCT_H #define INCLUDE_STRUCT_H @@ -313,7 +313,9 @@ typedef struct { int currsorted; time_t UTMPuptime; int UTMPnumber; - int UTMPbusystate; + char UTMPneedsort; + char UTMPbusystate; + char pad[2]; char gap[1024]; /* avoid some memory error / buffer overflow */ /* brdshm */ diff --git a/mbbsd/Makefile b/mbbsd/Makefile index 85e695f0..9204ead9 100644 --- a/mbbsd/Makefile +++ b/mbbsd/Makefile @@ -1,11 +1,11 @@ -# $Id: Makefile,v 1.17 2003/01/19 16:02:25 kcwu Exp $ +# $Id: Makefile,v 1.18 2003/02/10 17:41:45 in2 Exp $ # q¸q°ò¥»ªìÈ BBSHOME?= $(HOME) BBSHOME?= /home/bbs OSTYPE?= FreeBSD CC?= gcc -CFLAGS+= -Wall -W -pipe -DBBSHOME='"$(BBSHOME)"' -I../include +CFLAGS+= -Wall -pipe -DBBSHOME='"$(BBSHOME)"' -I../include LDFLAGS+= -pipe -Wall LIBS+= -lcrypt diff --git a/mbbsd/cache.c b/mbbsd/cache.c index ae5caad3..023ac8a7 100644 --- a/mbbsd/cache.c +++ b/mbbsd/cache.c @@ -1,4 +1,4 @@ -/* $Id: cache.c,v 1.57 2003/01/24 19:48:14 in2 Exp $ */ +/* $Id: cache.c,v 1.58 2003/02/10 17:41:45 in2 Exp $ */ #include "bbs.h" #ifndef __FreeBSD__ @@ -476,6 +476,7 @@ purge_utmp(userinfo_t * uentp) { logout_friend_online(uentp); memset(uentp, 0, sizeof(userinfo_t)); + SHM->UTMPneedsort = 1; } #endif diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index 2ef59687..3a5828b0 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -1,4 +1,4 @@ -/* $Id: mbbsd.c,v 1.65 2003/01/24 19:48:14 in2 Exp $ */ +/* $Id: mbbsd.c,v 1.66 2003/02/10 17:41:45 in2 Exp $ */ #include "bbs.h" #define SOCKET_QLEN 4 @@ -743,6 +743,7 @@ setup_utmp(int mode) if (enter_uflag & CLOAK_FLAG) uinfo.invisible = YEA; getnewutmpent(&uinfo); + SHM->UTMPneedsort = 1; #ifndef _BBS_UTIL_C_ friend_load(); nice(3); diff --git a/util/shmctl.c b/util/shmctl.c index 1eea2825..f1b7765c 100644 --- a/util/shmctl.c +++ b/util/shmctl.c @@ -1,4 +1,4 @@ -/* $Id: shmctl.c,v 1.31 2003/01/24 19:48:29 in2 Exp $ */ +/* $Id: shmctl.c,v 1.32 2003/02/10 17:41:45 in2 Exp $ */ #include "bbs.h" #include <sys/wait.h> @@ -59,6 +59,7 @@ int utmpfix(int argc, char **argv) time_t now, timeout = -1; char *clean, buf[1024], ch; IDLE_t idle[USHM_SIZE]; + char changeflag = 0; while( (ch = getopt(argc, argv, "nt:l:")) != -1 ) switch( ch ){ @@ -131,9 +132,12 @@ int utmpfix(int argc, char **argv) i, clean, SHM->uinfo[which].userid); memset(&SHM->uinfo[which], 0, sizeof(userinfo_t)); --nownum; + changeflag = 1; } } SHM->UTMPbusystate = 0; + if( changeflag ) + SHM->UTMPneedsort = 1; return 0; } /* end of utmpfix ---------------------------------------------------------- */ @@ -202,6 +206,7 @@ inline void utmpsort(void) userinfo_t *uentp; int count, i, ns; short nusers[MAX_BOARD]; + SHM->UTMPbusystate = 1; SHM->UTMPuptime = time(NULL); ns = (SHM->currsorted ? 0 : 1); @@ -264,7 +269,13 @@ int utmpsortd(int argc, char **argv) } else{ while( 1 ){ - utmpsort(); + int i; + for( i = 0 ; SHM->UTMPbusystate && i < 5 ; ++i ) + usleep(300000); + + if( SHM->UTMPneedsort ) + utmpsort(); + sleep(1); } } |