Allow limitation by loadavg not just calls (should be BSD friendly)...
[asterisk/asterisk.git] / pbx.c
diff --git a/pbx.c b/pbx.c
index b629980..843ce1d 100755 (executable)
--- a/pbx.c
+++ b/pbx.c
@@ -2477,7 +2477,7 @@ out:
 static int increase_call_count(const struct ast_channel *c)
 {
        int failed = 0;
-
+       double curloadavg;
        ast_mutex_lock(&maxcalllock);
        if (option_maxcalls) {
                if (countcalls >= option_maxcalls) {
@@ -2485,6 +2485,13 @@ static int increase_call_count(const struct ast_channel *c)
                        failed = -1;
                }
        }
+       if (option_maxload) {
+               getloadavg(&curloadavg, 1);
+               if (curloadavg >= option_maxload) {
+                       ast_log(LOG_NOTICE, "Maximum loadavg limit of %lf load exceeded by '%s' (currently %f)!\n", option_maxload, c->name, curloadavg);
+                       failed = -1;
+               }
+       }
        if (!failed)
                countcalls++;   
        ast_mutex_unlock(&maxcalllock);