core: Not the configured but granted number of possible file descriptors.
authorAlexander Traud <pabstraud@compuserve.com>
Wed, 8 Jun 2016 11:15:15 +0000 (13:15 +0200)
committerAlexander Traud <pabstraud@compuserve.com>
Fri, 10 Jun 2016 19:04:44 +0000 (21:04 +0200)
With CLI "core show settings", simply the parameter maxfiles of the file
asterisk.conf was shown. If that parameter was not set, nothing was displayed
although the environment might have set a default number itself. Or if maxfiles
were not granted (completely), still maxfiles was shown. Now, the maximum number
of possible file descriptors in the environment is shown.

ASTERISK-26097

Change-Id: I2df5c58863b5007b34b77adbe28b885dfcdf7e0b

main/asterisk.c

index 25c6c95..95f1b3e 100644 (file)
@@ -596,6 +596,7 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
        char buf[BUFSIZ];
        struct ast_tm tm;
        char eid_str[128];
+       struct rlimit limits;
 
        switch (cmd) {
        case CLI_INIT:
@@ -617,10 +618,17 @@ static char *handle_show_settings(struct ast_cli_entry *e, int cmd, struct ast_c
                ast_cli(a->fd, "  Maximum calls:               %d (Current %d)\n", ast_option_maxcalls, ast_active_channels());
        else
                ast_cli(a->fd, "  Maximum calls:               Not set\n");
-       if (ast_option_maxfiles)
-               ast_cli(a->fd, "  Maximum open file handles:   %d\n", ast_option_maxfiles);
-       else
-               ast_cli(a->fd, "  Maximum open file handles:   Not set\n");
+
+       if (getrlimit(RLIMIT_NOFILE, &limits)) {
+               ast_cli(a->fd, "  Maximum open file handles:   Error because of %s\n", strerror(errno));
+       } else if (limits.rlim_cur == RLIM_INFINITY) {
+               ast_cli(a->fd, "  Maximum open file handles:   Unlimited\n");
+       } else if (limits.rlim_cur < ast_option_maxfiles) {
+               ast_cli(a->fd, "  Maximum open file handles:   %d (is) %d (requested)\n", (int) limits.rlim_cur, ast_option_maxfiles);
+       } else {
+               ast_cli(a->fd, "  Maximum open file handles:   %d\n", (int) limits.rlim_cur);
+       }
+
        ast_cli(a->fd, "  Root console verbosity:      %d\n", option_verbose);
        ast_cli(a->fd, "  Current console verbosity:   %d\n", ast_verb_console_get());
        ast_cli(a->fd, "  Debug level:                 %d\n", option_debug);