diff options
author | Eli Zaretskii <eliz@gnu.org> | 2008-08-24 19:06:36 +0000 |
---|---|---|
committer | Eli Zaretskii <eliz@gnu.org> | 2008-08-24 19:06:36 +0000 |
commit | 8a445f762f0acc4aa6276a92bed5efbfaa78c3bc (patch) | |
tree | 96a83bea3ebab19255bee1111527ebee5fd3f15e /src | |
parent | c5e2611e3e21c705cf222c2138516ea6dfc7d8ec (diff) | |
download | emacs-8a445f762f0acc4aa6276a92bed5efbfaa78c3bc.tar.gz |
(get_lim_data) [MSDOS]: Use alternative methods of estimating available memory.
Diffstat (limited to 'src')
-rw-r--r-- | src/ChangeLog | 5 | ||||
-rw-r--r-- | src/vm-limit.c | 22 |
2 files changed, 26 insertions, 1 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 6d04d426998..89921e7b395 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2008-08-24 Eli Zaretskii <eliz@gnu.org> + + * vm-limit.c (get_lim_data) [MSDOS]: Use alternative methods of + estimating available memory. + 2008-08-23 David Reitter <david.reitter@gmail.com> * nsterm.m (ns_draw_window_cursor): Don't call diff --git a/src/vm-limit.c b/src/vm-limit.c index f80e5c47604..907732c82af 100644 --- a/src/vm-limit.c +++ b/src/vm-limit.c @@ -121,9 +121,29 @@ void get_lim_data () { _go32_dpmi_meminfo info; + unsigned long lim1, lim2; _go32_dpmi_get_free_memory_information (&info); - lim_data = info.available_memory; + /* DPMI server of Windows NT and its descendants reports in + info.available_memory a much lower amount that is really + available, which causes bogus "past 95% of memory limit" + warnings. Try to overcome that via circumstantial evidence. */ + lim1 = info.available_memory; + lim2 = info.available_physical_pages * 4096; + /* DPMI Spec: "Fields that are unavailable will hold -1." */ + if ((long)lim1 == -1L) + lim1 = 0; + if ((long)lim2 == -1L) + lim2 = 0; + /* Surely, the available memory is at least what we have physically + available, right? */ + if (lim1 > lim2) + lim_data = lim1; + else + lim_data = lim2; + /* Don't believe they will give us more that 0.5 GB. */ + if (lim_data > 512 * 1024 * 1024) + lim_data = 512 * 1024 * 1024; } #else /* not MSDOS */ static void |