Index: Makefile =================================================================== RCS file: /usr/cvsroot/asterisk/Makefile,v retrieving revision 1.216 diff -u -r1.216 Makefile --- Makefile 16 Oct 2005 03:08:58 -0000 1.216 +++ Makefile 17 Oct 2005 22:00:12 -0000 @@ -304,7 +304,7 @@ astmm.o enum.o srv.o dns.o aescrypt.o aestab.o aeskey.o \ utils.o plc.o jitterbuf.o dnsmgr.o devicestate.o \ netsock.o slinfactory.o ast_expr2.o ast_expr2f.o \ - cryptostub.o + cryptostub.o loadmonitor.o ifeq ($(wildcard $(CROSS_COMPILE_TARGET)/usr/include/sys/poll.h),) OBJS+= poll.o Index: asterisk.c =================================================================== RCS file: /usr/cvsroot/asterisk/asterisk.c,v retrieving revision 1.183 diff -u -r1.183 asterisk.c --- asterisk.c 29 Sep 2005 02:38:24 -0000 1.183 +++ asterisk.c 17 Oct 2005 22:00:14 -0000 @@ -2134,6 +2134,10 @@ printf(term_quit()); exit(1); } + if (loadmonitor_init()) { + printf(term_quit()); + exit(1); + } /* load 'preload' modules, required for access to Realtime-mapped configuration files */ if (load_modules(1)) { printf(term_quit()); Index: loader.c =================================================================== RCS file: /usr/cvsroot/asterisk/loader.c,v retrieving revision 1.52 diff -u -r1.52 loader.c --- loader.c 26 Sep 2005 17:17:56 -0000 1.52 +++ loader.c 17 Oct 2005 22:00:15 -0000 @@ -239,6 +239,10 @@ dnsmgr_reload(); reloaded = 2; } + if (!name || !strcasecmp(name, "loadmonitor")) { + loadmonitor_reload(); + reloaded = 2; + } time(&ast_lastreloadtime); ast_mutex_lock(&modlock); Index: pbx.c =================================================================== RCS file: /usr/cvsroot/asterisk/pbx.c,v retrieving revision 1.284 diff -u -r1.284 pbx.c --- pbx.c 13 Oct 2005 23:35:57 -0000 1.284 +++ pbx.c 17 Oct 2005 22:00:21 -0000 @@ -2473,7 +2473,7 @@ return 0; } -/* Returns 0 on success, non-zero if call limit was reached */ +/* Returns 0 on success, non-zero if call/load limit was reached */ static int increase_call_count(const struct ast_channel *c) { int failed = 0; @@ -2485,6 +2485,10 @@ failed = -1; } } + if (!failed && option_maxload && ast_above_maxload) { + ast_log(LOG_NOTICE, "Maximum load average of '%lf' exceeded by current load of '%lf' !\n", ast_curload, ast_maxload); + failed = -1; + } if (!failed) countcalls++; ast_mutex_unlock(&maxcalllock); Index: include/asterisk.h =================================================================== RCS file: /usr/cvsroot/asterisk/include/asterisk.h,v retrieving revision 1.10 diff -u -r1.10 asterisk.h --- include/asterisk.h 23 Aug 2005 01:30:22 -0000 1.10 +++ include/asterisk.h 17 Oct 2005 22:00:23 -0000 @@ -59,6 +59,9 @@ /* Provided by dnsmgr.c */ extern int dnsmgr_init(void); extern void dnsmgr_reload(void); +/* Provided by loadmonitor.c */ +extern int loadmonitor_init(void); +extern int loadmonitor_reload(void); /*! * \brief Register the version of a source code file with the core. Index: include/asterisk/options.h =================================================================== RCS file: /usr/cvsroot/asterisk/include/asterisk/options.h,v retrieving revision 1.17 diff -u -r1.17 options.h --- include/asterisk/options.h 30 Aug 2005 18:32:09 -0000 1.17 +++ include/asterisk/options.h 17 Oct 2005 22:00:23 -0000 @@ -45,6 +45,10 @@ extern int option_maxcalls; extern int option_dontwarn; extern int option_priority_jumping; +extern int option_maxload; +extern int ast_above_maxload; +extern double ast_curload; +extern double ast_maxload; extern char defaultlanguage[]; extern time_t ast_startuptime; extern time_t ast_lastreloadtime;