mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-10 06:49:40 +00:00
Merged revisions 284593,284595 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.6.2 ................ r284593 | tilghman | 2010-09-01 17:59:50 -0500 (Wed, 01 Sep 2010) | 18 lines Merged revisions 284478 via svnmerge from https://origsvn.digium.com/svn/asterisk/branches/1.4 ........ r284478 | tilghman | 2010-09-01 13:49:11 -0500 (Wed, 01 Sep 2010) | 11 lines Ensure that all areas that previously used select(2) now use poll(2), with implementations that need poll(2) implemented with select(2) safe against 1024-bit overflows. This is a followup to the fix for the pthread timer in 1.6.2 and beyond, fixing a potential crash bug in all supported releases. (closes issue #17678) Reported by: russell Branch: https://origsvn.digium.com/svn/asterisk/team/tilghman/ast_select Review: https://reviewboard.asterisk.org/r/824/ ........ ................ r284595 | tilghman | 2010-09-01 22:57:43 -0500 (Wed, 01 Sep 2010) | 2 lines Failed to rerun bootstrap.sh after last commit ................ git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@284597 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 1999 - 2008, Digium, Inc.
|
||||
* Copyright (C) 1999 - 2010, Digium, Inc.
|
||||
*
|
||||
* Mark Spencer <markster@digium.com>
|
||||
*
|
||||
@@ -272,6 +272,8 @@ static char ast_config_AST_CTL_OWNER[PATH_MAX] = "\0";
|
||||
static char ast_config_AST_CTL_GROUP[PATH_MAX] = "\0";
|
||||
static char ast_config_AST_CTL[PATH_MAX] = "asterisk.ctl";
|
||||
|
||||
extern unsigned int ast_FD_SETSIZE;
|
||||
|
||||
static char *_argv[256];
|
||||
static int shuttingdown;
|
||||
static int restartnow;
|
||||
@@ -3167,7 +3169,8 @@ int main(int argc, char *argv[])
|
||||
char *buf;
|
||||
const char *runuser = NULL, *rungroup = NULL;
|
||||
char *remotesock = NULL;
|
||||
int moduleresult; /*!< Result from the module load subsystem */
|
||||
int moduleresult; /*!< Result from the module load subsystem */
|
||||
struct rlimit l;
|
||||
|
||||
/* Remember original args for restart */
|
||||
if (argc > ARRAY_LEN(_argv) - 1) {
|
||||
@@ -3352,7 +3355,6 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
if (ast_opt_dump_core) {
|
||||
struct rlimit l;
|
||||
memset(&l, 0, sizeof(l));
|
||||
l.rlim_cur = RLIM_INFINITY;
|
||||
l.rlim_max = RLIM_INFINITY;
|
||||
@@ -3361,6 +3363,44 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
}
|
||||
|
||||
if (getrlimit(RLIMIT_NOFILE, &l)) {
|
||||
ast_log(LOG_WARNING, "Unable to check file descriptor limit: %s\n", strerror(errno));
|
||||
}
|
||||
|
||||
#if !defined(CONFIGURE_RAN_AS_ROOT)
|
||||
/* Check if select(2) will run with more file descriptors */
|
||||
do {
|
||||
int fd, fd2;
|
||||
ast_fdset readers;
|
||||
struct timeval tv = { 0, };
|
||||
|
||||
if (l.rlim_cur <= FD_SETSIZE) {
|
||||
/* The limit of select()able FDs is irrelevant, because we'll never
|
||||
* open one that high. */
|
||||
break;
|
||||
}
|
||||
|
||||
if (!(fd = open("/dev/null", O_RDONLY))) {
|
||||
ast_log(LOG_ERROR, "Cannot open a file descriptor at boot? %s\n", strerror(errno));
|
||||
break; /* XXX Should we exit() here? XXX */
|
||||
}
|
||||
|
||||
fd2 = (l.rlim_cur > sizeof(readers) * 8 ? sizeof(readers) * 8 : l.rlim_cur) - 1;
|
||||
if (dup2(fd, fd2)) {
|
||||
ast_log(LOG_WARNING, "Cannot open maximum file descriptor %d at boot? %s\n", fd2, strerror(errno));
|
||||
break;
|
||||
}
|
||||
|
||||
FD_ZERO(&readers);
|
||||
FD_SET(fd2, &readers);
|
||||
if (ast_select(fd2 + 1, &readers, NULL, NULL, &tv) < 0) {
|
||||
ast_log(LOG_WARNING, "Maximum select()able file descriptor is %d\n", FD_SETSIZE);
|
||||
}
|
||||
} while (0);
|
||||
#elif defined(HAVE_VARIABLE_FDSET)
|
||||
ast_FD_SETSIZE = l.rlim_cur;
|
||||
#endif /* !defined(CONFIGURE_RAN_AS_ROOT) */
|
||||
|
||||
if ((!rungroup) && !ast_strlen_zero(ast_config_AST_RUN_GROUP))
|
||||
rungroup = ast_config_AST_RUN_GROUP;
|
||||
if ((!runuser) && !ast_strlen_zero(ast_config_AST_RUN_USER))
|
||||
|
Reference in New Issue
Block a user