diff options
author | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-01-01 18:04:41 +0800 |
---|---|---|
committer | in2 <in2@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2004-01-01 18:04:41 +0800 |
commit | 566387a0641e4260ec5ed4f6592127d5e373668d (patch) | |
tree | 279f78b366667452fd88336f565ee84fedc74805 | |
parent | 03f93ae5b5773347501500802e828387971e5d15 (diff) | |
download | pttbbs-566387a0641e4260ec5ed4f6592127d5e373668d.tar pttbbs-566387a0641e4260ec5ed4f6592127d5e373668d.tar.gz pttbbs-566387a0641e4260ec5ed4f6592127d5e373668d.tar.bz2 pttbbs-566387a0641e4260ec5ed4f6592127d5e373668d.tar.lz pttbbs-566387a0641e4260ec5ed4f6592127d5e373668d.tar.xz pttbbs-566387a0641e4260ec5ed4f6592127d5e373668d.tar.zst pttbbs-566387a0641e4260ec5ed4f6592127d5e373668d.zip |
NOKILLWATERBALL,
do NOT kill(2) the process after sending a waterball,
and check if there exists a waterball before read(2) from socket.
this code is under testing and may have some bugs.
git-svn-id: http://opensvn.csie.org/pttbbs/trunk/pttbbs@1441 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | mbbsd/io.c | 4 | ||||
-rw-r--r-- | mbbsd/mbbsd.c | 7 | ||||
-rw-r--r-- | mbbsd/talk.c | 8 | ||||
-rw-r--r-- | mbbsd/var.c | 4 | ||||
-rw-r--r-- | sample/pttbbs.conf | 4 |
5 files changed, 25 insertions, 2 deletions
@@ -148,6 +148,10 @@ dogetch() { int len; static time_t lastact; +#ifdef NOKILLWATERBALL + if( currutmp && currutmp->msgcount && !reentrant_write_request ) + write_request(1); +#endif if (ibufsize <= icurrchar) { if (flushf) diff --git a/mbbsd/mbbsd.c b/mbbsd/mbbsd.c index 044927dc..b64cab13 100644 --- a/mbbsd/mbbsd.c +++ b/mbbsd/mbbsd.c @@ -358,7 +358,9 @@ void write_request(int sig) { int i; - +#ifdef NOKILLWATERBALL + reentrant_write_request = 1; +#endif if (WATERMODE(WATER_OFO)) { /* * sig = SIGUSR2 waterball come in 0 flush to water[] (by @@ -427,6 +429,9 @@ write_request(int sig) currutmp->msgcount = 0; } } +#ifdef NOKILLWATERBALL + reentrant_write_request = 0; +#endif } static void diff --git a/mbbsd/talk.c b/mbbsd/talk.c index 2c3842d4..827ef274 100644 --- a/mbbsd/talk.c +++ b/mbbsd/talk.c @@ -667,7 +667,13 @@ my_write(pid_t pid, char *prompt, char *id, int flag, userinfo_t * puin) } else if (flag != 2) outmsg("\033[1;33;41m糟糕! 對方不行了! (收到太多水球) \033[37m@_@\033[m"); - if (uin->msgcount >= 1 && (uin->pid <= 0 || kill(uin->pid, SIGUSR2) == -1) && flag != 2) + if (uin->msgcount >= 1 && +#ifdef NOKILLWATERBALL + 0 +#else + (uin->pid <= 0 || kill(uin->pid, SIGUSR2) == -1) +#endif + && flag != 2) outmsg("\033[1;33;41m糟糕! 沒打中! \033[37m~>_<~\033[m"); else if (uin->msgcount == 1 && flag != 2) outmsg("\033[1;33;44m水球砸過去了! \033[37m*^o^*\033[m"); diff --git a/mbbsd/var.c b/mbbsd/var.c index c58e8bb3..f2fb1500 100644 --- a/mbbsd/var.c +++ b/mbbsd/var.c @@ -621,6 +621,10 @@ char *friend_file[8] = { FN_VISABLE }; +#ifdef NOKILLWATERBALL +char reentrant_write_request = 0; +#endif + #ifdef PTTBBS_UTIL #ifdef OUTTA_TIMER #define COMMON_TIME (SHM->GV2.e.now) diff --git a/sample/pttbbs.conf b/sample/pttbbs.conf index 25e2b250..4aea85f3 100644 --- a/sample/pttbbs.conf +++ b/sample/pttbbs.conf @@ -124,6 +124,10 @@ 須配合使用 (尚未完成) */ //#define SAFE_ARTICLE_DELETE +/* 若定義, 則在傳送水球的時候, 不會直接 kill 該程序. 理論上可以減少大 + 量的系統負和 + (測試中, 未完成) */ +//#define NOKILLWATERBALL /* 前進站畫面 */ #define INSCREEN \ "前進站畫面 (請至 pttbbs.conf 修改您的前進站畫面)" |