]> git.eshelyaron.com Git - emacs.git/commitdiff
* src/alloc.c (Fmemory_info) [HAVE_LINUX_SYSINFO]: Return nil if
authorDmitry Antipov <dmantipov@yandex.ru>
Fri, 11 Jul 2014 12:19:58 +0000 (16:19 +0400)
committerDmitry Antipov <dmantipov@yandex.ru>
Fri, 11 Jul 2014 12:19:58 +0000 (16:19 +0400)
sysinfo failed.  Adjust docstring.
* doc/lispref/internals.texi (Garbage Collection): Mention memory-info.
* lisp/files.el (out-of-memory-warning-percentage): New defcustom.
(warn-maybe-out-of-memory): Use it.

doc/lispref/ChangeLog
doc/lispref/internals.texi
lisp/ChangeLog
lisp/files.el
src/ChangeLog
src/alloc.c

index 17af128ae491c09821868c3d4668a946581dd712..5f7e00a4f10cd76ebd844f96ce51b4890da3f40e 100644 (file)
@@ -1,3 +1,7 @@
+2014-07-11  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * internals.texi (Garbage Collection): Mention memory-info.
+
 2014-07-11  Michael Albinus  <michael.albinus@gmx.de>
 
        * minibuf.texi (Intro to Minibuffers, Reading a Password):
index 3a5bd4aea7eec1f51cfc4f738927cd7dba7241a7..626ecad7f423414716db698049e2fd59866110e3 100644 (file)
@@ -513,6 +513,10 @@ created in this Emacs session.  Each of these counters increments for
 a certain kind of object.  See the documentation string for details.
 @end defun
 
+@defun memory-info
+This functions returns an amount of total system memory and how much
+of it is free.  On an unsupported system, the value may be @code{nil}.
+
 @defvar gcs-done
 This variable contains the total number of garbage collections
 done so far in this Emacs session.
index 3965da7287b0ec369286f0fffb33738beadd8a66..faa5a3dffff90deb839f6deed813250c2bc38dbe 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-11  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * files.el (out-of-memory-warning-percentage): New defcustom.
+       (warn-maybe-out-of-memory): Use it.
+
 2014-07-11  Michael Albinus  <michael.albinus@gmx.de>
 
        * subr.el (read-passwd): Use `read-hide-char' if non-nil.  Bind it
index 258a37616c1f743fb88aaef92508c0e054057fbf..d3aa063e7882859b52559dc0f41d7fe302f1eac5 100644 (file)
@@ -1786,6 +1786,14 @@ When nil, never request confirmation."
   :version "22.1"
   :type '(choice integer (const :tag "Never request confirmation" nil)))
 
+(defcustom out-of-memory-warning-percentage 50
+  "Warn if file size exceeds this percentage of available free memory.
+When nil, never issue warning."
+  :group 'files
+  :group 'find-file
+  :version "24.4"
+  :type '(choice integer (const :tag "Never issue warning" nil)))
+
 (defun abort-if-file-too-large (size op-type filename)
   "If file SIZE larger than `large-file-warning-threshold', allow user to abort.
 OP-TYPE specifies the file operation being performed (for message to user)."
@@ -1798,19 +1806,22 @@ OP-TYPE specifies the file operation being performed (for message to user)."
 
 (defun warn-maybe-out-of-memory (size)
   "Warn if an attempt to open file of SIZE bytes may run out of memory."
-  (when (and (numberp size) (not (zerop size)))
+  (when (and (numberp size) (not (zerop size))
+            (integerp out-of-memory-warning-percentage))
     (let ((meminfo (memory-info)))
       (when (consp meminfo)
-       (let ((total-free-memory (+ (nth 1 meminfo) (nth 3 meminfo))))
-         (when (> (/ size 1024) total-free-memory)
+       (let ((total-free-memory (float (+ (nth 1 meminfo) (nth 3 meminfo)))))
+         (when (> (/ size 1024)
+                  (/ (* total-free-memory out-of-memory-warning-percentage)
+                     100.0))
            (warn
             "You are trying to open a file whose size (%s)
-exceeds the amount of currently available free memory (%s).
+exceeds the %S%% of currently available free memory (%s).
 If that fails, try to open it with `find-file-literally'
 \(but note that some characters might be displayed incorrectly)."
             (file-size-human-readable size)
-            (file-size-human-readable
-             (* (float total-free-memory) 1024)))))))))
+            out-of-memory-warning-percentage
+            (file-size-human-readable (* total-free-memory 1024)))))))))
 
 (defun find-file-noselect (filename &optional nowarn rawfile wildcards)
   "Read file FILENAME into a buffer and return the buffer.
index e469880a4ceb9fc7f9d9680768c22e3bba9fb89d..52ba04d2f5ff171150ac236bbe8325cd13d431df 100644 (file)
@@ -1,3 +1,8 @@
+2014-07-11  Dmitry Antipov  <dmantipov@yandex.ru>
+
+       * alloc.c (Fmemory_info) [HAVE_LINUX_SYSINFO]: Return nil if
+       sysinfo failed.  Adjust docstring.
+
 2014-07-11  Eli Zaretskii  <eliz@gnu.org>
 
        Implement memory-info for MS-DOS.
index 77be94d73d10fb43b2b36a7515ced861894d3bf8..a8ad44491fad7f3ba8318a5ed8597d04a1a18288 100644 (file)
@@ -6875,8 +6875,9 @@ gc_sweep (void)
 
 DEFUN ("memory-info", Fmemory_info, Smemory_info, 0, 0, 0,
        doc: /* Return a list of (TOTAL-RAM FREE-RAM TOTAL-SWAP FREE-SWAP).
-All values are in Kbytes.  If there is no swap space, last two
-values are zero.  If the system is not supported, return nil.  */)
+All values are in Kbytes.  If there is no swap space,
+last two values are zero.  If the system is not supported
+or memory information can't be obtained, return nil.  */)
   (void)
 {
 #if defined HAVE_LINUX_SYSINFO
@@ -6884,7 +6885,7 @@ values are zero.  If the system is not supported, return nil.  */)
   uintmax_t units;
 
   if (sysinfo (&si))
-    emacs_abort ();
+    return Qnil;
 #ifdef LINUX_SYSINFO_UNIT
   units = si.mem_unit;
 #else