diff options
-rw-r--r-- | mbbsd/talk.c | 14 | ||||
-rw-r--r-- | util/shmctl.c | 33 |
2 files changed, 26 insertions, 21 deletions
diff --git a/mbbsd/talk.c b/mbbsd/talk.c index c9b108c8..d2c6fb8a 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -1,4 +1,4 @@ -/* $Id: talk.c,v 1.18 2002/03/20 13:49:45 ptt Exp $ */ +/* $Id: talk.c,v 1.19 2002/04/09 20:10:31 in2 Exp $ */ #include <stdio.h> #include <string.h> #include <errno.h> @@ -69,7 +69,7 @@ typedef struct talkwin_t { typedef struct pickup_t { userinfo_t *ui; - time_t idle; + //time_t idle; int friend; } pickup_t; @@ -1525,7 +1525,7 @@ static int pickup_user_cmp(time_t now, int sortedway, int cmp_fri, pickup_t pklist[], int *bfriends_number, int *ifh_number, int *hfm_number,int *irh_number, char *keyword) { - int i, fri_stat, is_friend, count=0, diff; + int i, fri_stat, is_friend, count=0; userinfo_t *uentp; for (i=0;i<utmpshm->number;i++){ uentp = (utmpshm->sorted[utmpshm->currsorted][sortedway][i]); @@ -1544,10 +1544,12 @@ static int pickup_user_cmp(time_t now, int sortedway, int cmp_fri, if (ifh_number && fri_stat & IFH) (*ifh_number)++; if (hfm_number && fri_stat & HFM) (*hfm_number)++; if (irh_number && fri_stat & IRH) (*irh_number)++; +#if 0 #ifdef SHOW_IDLE_TIME diff = now - uentp->lastact; #ifdef DOTIMEOUT - /* prevent fault /dev mount from kicking out users */ + /* in2: timeout拿到 shmctl utmpfix去做, 一小時一次就夠了 */ + /* prevent fault /dev mount from kicking out users */ if ((diff > curr_idle_timeout + 10) && (diff < 60 * 60 * 24 * 5)){ if ((uentp->pid <= 0 || kill(uentp->pid, SIGHUP) == -1) && @@ -1558,6 +1560,7 @@ static int pickup_user_cmp(time_t now, int sortedway, int cmp_fri, #endif pklist[count].idle = diff; #endif +#endif pklist[count].friend = fri_stat; pklist[count].ui = uentp; count++; @@ -1721,7 +1724,8 @@ static void pickup_user(void) continue; } #ifdef SHOW_IDLE_TIME - diff = pklist[ch].idle; + diff = freshtime - pklist[ch].ui->lastact; + //diff = pklist[ch].idle; if (diff > 59990) diff = 59990; /* Doma: 以免一大串的發呆時間 */ if (diff > 0) sprintf(buf, "%3ld'%02ld", diff / 60, diff % 60); diff --git a/util/shmctl.c b/util/shmctl.c index 13b97d14..0d8a3589 100644 --- a/util/shmctl.c +++ b/util/shmctl.c @@ -5,7 +5,6 @@ #include <ctype.h> #include <signal.h> #include <sys/types.h> -#include <sys/stat.h> #include <sys/shm.h> #include "config.h" #include "pttstruct.h" @@ -17,29 +16,31 @@ extern struct utmpfile_t *utmpshm; int utmpfix(int argc, char **argv) { int i; + time_t now; char buf[1024], *clean; - struct stat st; - if( utmpshm->busystate ){ - puts("utmpshm is busy"); - return 0; - } + + time(&now); + for( i = 0 ; i < 5 ; ++i ) + if( !utmpshm->busystate ) + break; + else{ + puts("utmpshm is busy...."); + sleep(1); + } utmpshm->busystate = 1; for( i = 0 ; i < USHM_SIZE ; ++i ) if( utmpshm->uinfo[i].pid ){ clean = NULL; if( !isalpha(utmpshm->uinfo[i].userid[0]) ) clean = "userid error"; + else if( now - utmpshm->uinfo[i].lastact > 1800 ) + clean = "timeout"; else{ - sprintf(buf, "/proc/%d", utmpshm->uinfo[i].pid); - if( stat(buf, &st) < 0 ) - clean = "process not exist"; - else{ - sprintf(buf, "home/%c/%s", - utmpshm->uinfo[i].userid[0], - utmpshm->uinfo[i].userid); - if( stat(buf, &st) < 0 ) - clean = "user not exist"; - } + sprintf(buf, "home/%c/%s", + utmpshm->uinfo[i].userid[0], + utmpshm->uinfo[i].userid); + if( access(buf, 0) < 0 ) + clean = "user not exist"; } if( clean ){ |