* src/alloc.c (Fmemory_info) [HAVE_LINUX_SYSINFO]: Return nil if
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.
This commit is contained in:
parent
5f7c30e757
commit
3aa96ff51e
6 changed files with 39 additions and 9 deletions
|
@ -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):
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue