summaryrefslogtreecommitdiffstats
path: root/util/shmctl.c
diff options
context:
space:
mode:
authorin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-01-01 21:12:54 +0800
committerin2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204>2004-01-01 21:12:54 +0800
commit030c46c0432b7fa6b025b7cefbefe4fbab325092 (patch)
tree9d039ce4c01762d0bfbbbb040fee7ee967b82962 /util/shmctl.c
parent566387a0641e4260ec5ed4f6592127d5e373668d (diff)
downloadpttbbs-030c46c0432b7fa6b025b7cefbefe4fbab325092.tar
pttbbs-030c46c0432b7fa6b025b7cefbefe4fbab325092.tar.gz
pttbbs-030c46c0432b7fa6b025b7cefbefe4fbab325092.tar.bz2
pttbbs-030c46c0432b7fa6b025b7cefbefe4fbab325092.tar.lz
pttbbs-030c46c0432b7fa6b025b7cefbefe4fbab325092.tar.xz
pttbbs-030c46c0432b7fa6b025b7cefbefe4fbab325092.tar.zst
pttbbs-030c46c0432b7fa6b025b7cefbefe4fbab325092.zip
NOKILLWATERBALL done.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1442 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
Diffstat (limited to 'util/shmctl.c')
-rw-r--r--util/shmctl.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/util/shmctl.c b/util/shmctl.c
index 74cf3e12..772df087 100644
--- a/util/shmctl.c
+++ b/util/shmctl.c
@@ -532,6 +532,12 @@ int SHMinit(int argc, char **argv)
puts("timed...");
timed(1, NULL);
#endif
+
+#ifdef NOKILLWATERBALL
+ puts("nkwbd...");
+ nkwbd(1, NULL);
+#endif
+
return 0;
}
@@ -611,6 +617,64 @@ int usermode(int argc, char **argv)
return 0;
}
+#ifdef NOKILLWATERBALL
+int nkwbd(int argc, char **argv)
+{
+ int ch, sleeptime = 120, timeout = 120;
+ while( (ch = getopt(argc, argv, "s:t:h")) != -1 )
+ switch( ch ){
+ case 's':
+ if( (sleeptime = atoi(optarg)) < 10 ){
+ fprintf(stderr, "sleeptime < 10? set to 60");
+ sleeptime = 60;
+ }
+ break;
+
+ case 't':
+ if( (timeout = atoi(optarg)) < 10 ){
+ fprintf(stderr, "timeout < 10? set to 60");
+ timeout = 60;
+ }
+ break;
+
+ default:
+ fprintf(stderr, "usage: shmctl nkwbd [-s sleeptime] [-t timeout]\n");
+ return 0;
+ }
+
+ switch( fork() ){
+ case -1:
+ perror("fork()");
+ return 0;
+ break;
+
+ case 0: /* child */
+ while( 1 ){
+ int i;
+ time_t t = SHM->GV2.e.now - timeout;
+
+ printf("scanning\n");
+ for( i = 0 ; i < MAX_ACTIVE ; ++i )
+ if( SHM->uinfo[i].pid &&
+ SHM->uinfo[i].wbtime &&
+ SHM->uinfo[i].wbtime < t ){
+ printf("kill: %d\n", SHM->uinfo[i].pid);
+ kill(SHM->uinfo[i].pid, SIGUSR2);
+ SHM->uinfo[i].wbtime = 0; /* race */
+ }
+ printf("scanned\n");
+ sleep(sleeptime);
+ }
+ break;
+
+ default: /* parent */
+ fprintf(stderr, "nkwbd\n");
+ return 0;
+ }
+ return 0;
+}
+#endif
+
struct {
int (*func)(int, char **);
char *cmd, *descript;
@@ -628,6 +692,9 @@ struct {
#ifdef OUTTA_TIMER
{timed, "timed", "time daemon for OUTTA_TIMER"},
#endif
+#ifdef NOKILLWATERBALL
+ {nkwbd, "nkwbd", "NOKillWaterBall daemon"},
+#endif
{bBMC, "bBMC", "build BM cache"},
{SHMinit, "SHMinit", "initialize SHM (including uhash_loader)"},
{hotboard, "hotboard", "list boards of most bfriends"},