From: Walter Doekes Date: Thu, 9 Oct 2014 07:59:11 +0000 (+0000) Subject: safe_asterisk: Don't automatically exceed MAXFILES value of 2^20. X-Git-Tag: 1.8.32.0-rc1~26 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a3032baf86c0c861afc7ab62016178d03cb5cf2b;p=thirdparty%2Fasterisk.git safe_asterisk: Don't automatically exceed MAXFILES value of 2^20. On systems with lots of RAM (e.g. 24GB) /proc/sys/fs/file-max divided by two can exceed the per-process file limit of 2^20. This patch ensures the value is capped. (Patch cleaned up by me.) ASTERISK-24011 #close Reported by: Michael Myles Patches: safe_asterisk-ulimit.diff uploaded by Michael Myles (License #6626) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@424875 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/channels/chan_sip.c b/channels/chan_sip.c index e42d78ff6f..ab511a0927 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -24737,6 +24737,10 @@ static int handle_request_bye(struct sip_pvt *p, struct sip_request *req) } else { transmit_response(p, "200 OK", req); } + + /* Destroy any pending invites so we won't try to do another + * scheduled reINVITE. */ + AST_SCHED_DEL_UNREF(sched, p->waitid, dialog_unref(p, "decrement refcount from sip_destroy because waitid won't be scheduled")); return 1; } diff --git a/contrib/scripts/safe_asterisk b/contrib/scripts/safe_asterisk index deb018eb32..90f804ed58 100644 --- a/contrib/scripts/safe_asterisk +++ b/contrib/scripts/safe_asterisk @@ -63,12 +63,17 @@ if test `id -u` != 0; then message "safe_asterisk was started by `id -n` (uid `id -u`)." else if `uname -s | grep Linux >/dev/null 2>&1`; then - # maximum number of open files is set to the system maximum divided by two if - # MAXFILES is not set. + # maximum number of open files is set to the system maximum + # divided by two if MAXFILES is not set. if test -z "$MAXFILES"; then # just check if file-max is readable if test -r /proc/sys/fs/file-max; then - MAXFILES=$(( `cat /proc/sys/fs/file-max` / 2 )) + MAXFILES=$((`cat /proc/sys/fs/file-max` / 2)) + # don't exceed upper limit of 2^20 for open + # files on systems where file-max is > 2^21 + if test $MAXFILES -gt 1048576; then + MAXFILES=1048576 + fi fi fi SYSCTL_MAXFILES="fs.file-max"