diff options
author | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2010-04-26 17:55:41 +0800 |
---|---|---|
committer | piaip <piaip@63ad8ddf-47c3-0310-b6dd-a9e9d9715204> | 2010-04-26 17:55:41 +0800 |
commit | 694b43eb6c593a2373cda94dd79c12c4ec16d2d1 (patch) | |
tree | ef3dac265a8d6b28298699231633a879fa516dc2 | |
parent | 4944da34555c3aebce8258cb81955275e0bb8acc (diff) | |
download | pttbbs-694b43eb6c593a2373cda94dd79c12c4ec16d2d1.tar pttbbs-694b43eb6c593a2373cda94dd79c12c4ec16d2d1.tar.gz pttbbs-694b43eb6c593a2373cda94dd79c12c4ec16d2d1.tar.bz2 pttbbs-694b43eb6c593a2373cda94dd79c12c4ec16d2d1.tar.lz pttbbs-694b43eb6c593a2373cda94dd79c12c4ec16d2d1.tar.xz pttbbs-694b43eb6c593a2373cda94dd79c12c4ec16d2d1.tar.zst pttbbs-694b43eb6c593a2373cda94dd79c12c4ec16d2d1.zip |
* add boundary check when ack queue grows too high, in order to prevent buffer full on tunnel
git-svn-id: http://opensvn.csie.org/pttbbs/trunk@5039 63ad8ddf-47c3-0310-b6dd-a9e9d9715204
-rw-r--r-- | pttbbs/daemon/logind/logind.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/pttbbs/daemon/logind/logind.c b/pttbbs/daemon/logind/logind.c index a93f0f2b..3f9cd995 100644 --- a/pttbbs/daemon/logind/logind.c +++ b/pttbbs/daemon/logind/logind.c @@ -44,6 +44,10 @@ #define LOGIND_MAX_FDS (100000) #endif +#ifndef LOGIND_ACKQUEUE_BOUND +#define LOGIND_ACKQUEUE_BOUND (255) +#endif + #define MY_EVENT_PRIORITY_NUMBERS (4) #define EVTPRIORITY_NORM (MY_EVENT_PRIORITY_NUMBERS/2) #define EVTPRIORITY_ACK (EVTPRIORITY_NORM-1) @@ -365,6 +369,12 @@ ackq_gc() g_ack_queue.reuse = g_ack_queue.size = 0; } +static ssize_t +ackq_size() +{ + return g_ack_queue.size - g_ack_queue.reuse; +} + static void ackq_add(login_conn_ctx *ctx) { @@ -1275,7 +1285,8 @@ auth_start(int fd, login_conn_ctx *conn) draw_auth_success(conn, isfree); - if (!start_service(fd, conn)) + if (ackq_size() > LOGIND_ACKQUEUE_BOUND || + !start_service(fd, conn)) { // too bad, we can't start service. retry_service(); |