From dfa80fc343e382e99e91304e9a058d582eaa841e Mon Sep 17 00:00:00 2001 From: kpfleming Date: Wed, 30 Apr 2008 14:46:57 +0000 Subject: use the ARRAY_LEN macro for indexing through the iaxs/iaxsl arrays so that the size of the arrays can be adjusted in one place, and change the size of the arrays from 32768 calls to 2048 calls when LOW_MEMORY is defined git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.4@114880 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_iax2.c | 45 +++++++++++++++++++++++++++------------------ channels/iax2.h | 5 +++++ 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c index a949a1c50..deec4c069 100644 --- a/channels/chan_iax2.c +++ b/channels/chan_iax2.c @@ -127,9 +127,6 @@ static int nochecksums = 0; #define DEFAULT_RETRY_TIME 1000 #define MEMORY_SIZE 100 #define DEFAULT_DROP 3 -/* Flag to use with trunk calls, keeping these calls high up. It halves our effective use - but keeps the division between trunked and non-trunked better. */ -#define TRUNK_CALL_START 0x4000 #define DEBUG_SUPPORT @@ -151,8 +148,6 @@ static int maxauthreq = 3; static int max_retries = 4; static int ping_time = 21; static int lagrq_time = 10; -static int maxtrunkcall = TRUNK_CALL_START; -static int maxnontrunkcall = 1; static int maxjitterbuffer=1000; static int resyncthreshold=1000; static int maxjitterinterps=10; @@ -811,8 +806,15 @@ static void jb_debug_output(const char *fmt, ...) /* XXX We probably should use a mutex when working with this XXX */ static struct chan_iax2_pvt *iaxs[IAX_MAX_CALLS]; -static ast_mutex_t iaxsl[IAX_MAX_CALLS]; -static struct timeval lastused[IAX_MAX_CALLS]; +static ast_mutex_t iaxsl[ARRAY_LEN(iaxs)]; +static struct timeval lastused[ARRAY_LEN(iaxs)]; + +/* Flag to use with trunk calls, keeping these calls high up. It halves our effective use + but keeps the division between trunked and non-trunked better. */ +#define TRUNK_CALL_START ARRAY_LEN(iaxs) / 2 + +static int maxtrunkcall = TRUNK_CALL_START; +static int maxnontrunkcall = 1; static enum ast_bridge_result iax2_bridge(struct ast_channel *c0, struct ast_channel *c1, int flags, struct ast_frame **fo, struct ast_channel **rc, int timeoutms); static int expire_registry(const void *data); @@ -1263,11 +1265,14 @@ static void update_max_trunk(void) { int max = TRUNK_CALL_START; int x; + /* XXX Prolly don't need locks here XXX */ - for (x=TRUNK_CALL_START;x MIN_REUSE_TIME)) { iaxs[x] = iaxs[callno]; @@ -1321,7 +1326,7 @@ static int make_trunk(unsigned short callno, int locked) } ast_mutex_unlock(&iaxsl[x]); } - if (x >= IAX_MAX_CALLS - 1) { + if (x >= ARRAY_LEN(iaxs) - 1) { ast_log(LOG_WARNING, "Unable to trunk call: Insufficient space\n"); return -1; } @@ -4696,7 +4701,7 @@ static int iax2_show_channels(int fd, int argc, char *argv[]) if (argc != 3) return RESULT_SHOWUSAGE; ast_cli(fd, FORMAT2, "Channel", "Peer", "Username", "ID (Lo/Rem)", "Seq (Tx/Rx)", "Lag", "Jitter", "JitBuf", "Format"); - for (x=0;x