summaryrefslogtreecommitdiff
path: root/src/vm-limit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vm-limit.c')
-rw-r--r--src/vm-limit.c57
1 files changed, 15 insertions, 42 deletions
diff --git a/src/vm-limit.c b/src/vm-limit.c
index 4d668ec2ad3..ab102e32623 100644
--- a/src/vm-limit.c
+++ b/src/vm-limit.c
@@ -21,7 +21,7 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
#include "lisp.h"
#ifdef MSDOS
-#include <dpmi.h>
+#include "dosfns.h"
extern int etext;
#endif
@@ -51,6 +51,15 @@ char data_start[1] = { 1 };
# endif
#endif
+/* From gmalloc.c. */
+extern void (* __after_morecore_hook) (void);
+extern void *(*__morecore) (ptrdiff_t);
+
+/* From ralloc.c. */
+#ifdef REL_ALLOC
+extern void *(*real_morecore) (ptrdiff_t);
+#endif
+
/*
Level number of warnings already issued.
0 -- no warnings issued.
@@ -71,15 +80,6 @@ static char *data_space_start;
/* Number of bytes of writable memory we can expect to be able to get. */
static size_t lim_data;
-/* Return true if PTR cannot be represented as an Emacs Lisp object. */
-static bool
-exceeds_lisp_ptr (void *ptr)
-{
- return (! USE_LSB_TAG
- && VAL_MAX < UINTPTR_MAX
- && ((uintptr_t) ptr & ~DATA_SEG_BITS) >> VALBITS != 0);
-}
-
#ifdef HAVE_GETRLIMIT
# ifndef RLIMIT_AS
@@ -115,29 +115,10 @@ get_lim_data (void)
void
get_lim_data (void)
{
- _go32_dpmi_meminfo info;
- unsigned long lim1, lim2;
-
- _go32_dpmi_get_free_memory_information (&info);
- /* 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;
- /* DPMI Spec: "Fields that are unavailable will hold -1." */
- if ((long)lim1 == -1L)
- lim1 = 0;
- if ((long)lim2 == -1L)
- lim2 = 0;
- else
- lim2 *= 4096;
- /* Surely, the available memory is at least what we have physically
- available, right? */
- if (lim1 >= lim2)
- lim_data = lim1;
- else
- lim_data = lim2;
+ unsigned long totalram, freeram, totalswap, freeswap;
+
+ dos_memory_info (&totalram, &freeram, &totalswap, &freeswap);
+ lim_data = freeram;
/* Don't believe they will give us more that 0.5 GB. */
if (lim_data > 512U * 1024U * 1024U)
lim_data = 512U * 1024U * 1024U;
@@ -158,12 +139,9 @@ ret_lim_data (void)
static void
check_memory_limits (void)
{
-#ifdef REL_ALLOC
- extern void *(*real_morecore) (ptrdiff_t);
-#else
+#ifndef REL_ALLOC
void *(*real_morecore) (ptrdiff_t) = 0;
#endif
- extern void *(*__morecore) (ptrdiff_t);
char *cp;
size_t five_percent;
@@ -222,9 +200,6 @@ check_memory_limits (void)
else if (warnlevel > warned_85 && data_size < five_percent * 18)
warnlevel = warned_85;
}
-
- if (exceeds_lisp_ptr (cp))
- (*warn_function) ("Warning: memory in use exceeds lisp pointer size");
}
/* Enable memory usage warnings.
@@ -234,8 +209,6 @@ check_memory_limits (void)
void
memory_warnings (void *start, void (*warnfun) (const char *))
{
- extern void (* __after_morecore_hook) (void); /* From gmalloc.c */
-
data_space_start = start ? start : data_start;
warn_function = warnfun;