diff options
| author | Richard M. Stallman | 2003-04-06 20:27:19 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2003-04-06 20:27:19 +0000 |
| commit | 918a23a7d96ac12d9d072a1631a94350f7f4787a (patch) | |
| tree | 6ae75de0c6153c769ed4e6fe6e32d03051e7729a /src/alloc.c | |
| parent | a3a349c42d8d0bf8efdecb578ec4985101f73061 (diff) | |
| download | emacs-918a23a7d96ac12d9d072a1631a94350f7f4787a.tar.gz emacs-918a23a7d96ac12d9d072a1631a94350f7f4787a.zip | |
(VALIDATE_LISP_STORAGE): Macro deleted. All calls deleted.
(lisp_malloc): Do the work here directly.
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/src/alloc.c b/src/alloc.c index 0fc3198b773..4dcc5b49825 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -84,23 +84,6 @@ extern __malloc_size_t __malloc_extra_blocks; | |||
| 84 | 84 | ||
| 85 | #endif /* not DOUG_LEA_MALLOC */ | 85 | #endif /* not DOUG_LEA_MALLOC */ |
| 86 | 86 | ||
| 87 | /* Macro to verify that storage intended for Lisp objects is not | ||
| 88 | out of range to fit in the space for a pointer. | ||
| 89 | ADDRESS is the start of the block, and SIZE | ||
| 90 | is the amount of space within which objects can start. */ | ||
| 91 | |||
| 92 | #define VALIDATE_LISP_STORAGE(address, size) \ | ||
| 93 | do \ | ||
| 94 | { \ | ||
| 95 | Lisp_Object val; \ | ||
| 96 | XSETCONS (val, (char *) address + size); \ | ||
| 97 | if ((char *) XCONS (val) != (char *) address + size) \ | ||
| 98 | { \ | ||
| 99 | xfree (address); \ | ||
| 100 | memory_full (); \ | ||
| 101 | } \ | ||
| 102 | } while (0) | ||
| 103 | |||
| 104 | /* Value of _bytes_used, when spare_memory was freed. */ | 87 | /* Value of _bytes_used, when spare_memory was freed. */ |
| 105 | 88 | ||
| 106 | static __malloc_size_t bytes_used_when_full; | 89 | static __malloc_size_t bytes_used_when_full; |
| @@ -584,6 +567,8 @@ xstrdup (s) | |||
| 584 | number of bytes to allocate, TYPE describes the intended use of the | 567 | number of bytes to allocate, TYPE describes the intended use of the |
| 585 | allcated memory block (for strings, for conses, ...). */ | 568 | allcated memory block (for strings, for conses, ...). */ |
| 586 | 569 | ||
| 570 | static void *lisp_malloc_loser; | ||
| 571 | |||
| 587 | static POINTER_TYPE * | 572 | static POINTER_TYPE * |
| 588 | lisp_malloc (nbytes, type) | 573 | lisp_malloc (nbytes, type) |
| 589 | size_t nbytes; | 574 | size_t nbytes; |
| @@ -599,6 +584,21 @@ lisp_malloc (nbytes, type) | |||
| 599 | 584 | ||
| 600 | val = (void *) malloc (nbytes); | 585 | val = (void *) malloc (nbytes); |
| 601 | 586 | ||
| 587 | /* If the memory just allocated cannot be addressed thru a Lisp | ||
| 588 | object's pointer, and it needs to be, | ||
| 589 | that's equivalent to running out of memory. */ | ||
| 590 | if (val && type != MEM_TYPE_NON_LISP) | ||
| 591 | { | ||
| 592 | Lisp_Object tem; | ||
| 593 | XSETCONS (tem, (char *) val + nbytes - 1); | ||
| 594 | if ((char *) XCONS (tem) != (char *) val + nbytes - 1) | ||
| 595 | { | ||
| 596 | lisp_malloc_loser = val; | ||
| 597 | free (val); | ||
| 598 | val = 0; | ||
| 599 | } | ||
| 600 | } | ||
| 601 | |||
| 602 | #if GC_MARK_STACK && !defined GC_MALLOC_CHECK | 602 | #if GC_MARK_STACK && !defined GC_MALLOC_CHECK |
| 603 | if (val && type != MEM_TYPE_NON_LISP) | 603 | if (val && type != MEM_TYPE_NON_LISP) |
| 604 | mem_insert (val, (char *) val + nbytes, type); | 604 | mem_insert (val, (char *) val + nbytes, type); |
| @@ -620,7 +620,6 @@ allocate_buffer () | |||
| 620 | struct buffer *b | 620 | struct buffer *b |
| 621 | = (struct buffer *) lisp_malloc (sizeof (struct buffer), | 621 | = (struct buffer *) lisp_malloc (sizeof (struct buffer), |
| 622 | MEM_TYPE_BUFFER); | 622 | MEM_TYPE_BUFFER); |
| 623 | VALIDATE_LISP_STORAGE (b, sizeof *b); | ||
| 624 | return b; | 623 | return b; |
| 625 | } | 624 | } |
| 626 | 625 | ||
| @@ -932,7 +931,6 @@ make_interval () | |||
| 932 | newi = (struct interval_block *) lisp_malloc (sizeof *newi, | 931 | newi = (struct interval_block *) lisp_malloc (sizeof *newi, |
| 933 | MEM_TYPE_NON_LISP); | 932 | MEM_TYPE_NON_LISP); |
| 934 | 933 | ||
| 935 | VALIDATE_LISP_STORAGE (newi, sizeof *newi); | ||
| 936 | newi->next = interval_block; | 934 | newi->next = interval_block; |
| 937 | interval_block = newi; | 935 | interval_block = newi; |
| 938 | interval_block_index = 0; | 936 | interval_block_index = 0; |
| @@ -1315,7 +1313,6 @@ allocate_string () | |||
| 1315 | int i; | 1313 | int i; |
| 1316 | 1314 | ||
| 1317 | b = (struct string_block *) lisp_malloc (sizeof *b, MEM_TYPE_STRING); | 1315 | b = (struct string_block *) lisp_malloc (sizeof *b, MEM_TYPE_STRING); |
| 1318 | VALIDATE_LISP_STORAGE (b, sizeof *b); | ||
| 1319 | bzero (b, sizeof *b); | 1316 | bzero (b, sizeof *b); |
| 1320 | b->next = string_blocks; | 1317 | b->next = string_blocks; |
| 1321 | string_blocks = b; | 1318 | string_blocks = b; |
| @@ -1983,7 +1980,6 @@ make_float (float_value) | |||
| 1983 | 1980 | ||
| 1984 | new = (struct float_block *) lisp_malloc (sizeof *new, | 1981 | new = (struct float_block *) lisp_malloc (sizeof *new, |
| 1985 | MEM_TYPE_FLOAT); | 1982 | MEM_TYPE_FLOAT); |
| 1986 | VALIDATE_LISP_STORAGE (new, sizeof *new); | ||
| 1987 | new->next = float_block; | 1983 | new->next = float_block; |
| 1988 | float_block = new; | 1984 | float_block = new; |
| 1989 | float_block_index = 0; | 1985 | float_block_index = 0; |
| @@ -2090,7 +2086,6 @@ DEFUN ("cons", Fcons, Scons, 2, 2, 0, | |||
| 2090 | register struct cons_block *new; | 2086 | register struct cons_block *new; |
| 2091 | new = (struct cons_block *) lisp_malloc (sizeof *new, | 2087 | new = (struct cons_block *) lisp_malloc (sizeof *new, |
| 2092 | MEM_TYPE_CONS); | 2088 | MEM_TYPE_CONS); |
| 2093 | VALIDATE_LISP_STORAGE (new, sizeof *new); | ||
| 2094 | new->next = cons_block; | 2089 | new->next = cons_block; |
| 2095 | cons_block = new; | 2090 | cons_block = new; |
| 2096 | cons_block_index = 0; | 2091 | cons_block_index = 0; |
| @@ -2250,7 +2245,6 @@ allocate_vectorlike (len, type) | |||
| 2250 | mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); | 2245 | mallopt (M_MMAP_MAX, MMAP_MAX_AREAS); |
| 2251 | #endif | 2246 | #endif |
| 2252 | 2247 | ||
| 2253 | VALIDATE_LISP_STORAGE (p, 0); | ||
| 2254 | consing_since_gc += nbytes; | 2248 | consing_since_gc += nbytes; |
| 2255 | vector_cells_consed += len; | 2249 | vector_cells_consed += len; |
| 2256 | 2250 | ||
| @@ -2548,7 +2542,6 @@ Its value and function definition are void, and its property list is nil. */) | |||
| 2548 | struct symbol_block *new; | 2542 | struct symbol_block *new; |
| 2549 | new = (struct symbol_block *) lisp_malloc (sizeof *new, | 2543 | new = (struct symbol_block *) lisp_malloc (sizeof *new, |
| 2550 | MEM_TYPE_SYMBOL); | 2544 | MEM_TYPE_SYMBOL); |
| 2551 | VALIDATE_LISP_STORAGE (new, sizeof *new); | ||
| 2552 | new->next = symbol_block; | 2545 | new->next = symbol_block; |
| 2553 | symbol_block = new; | 2546 | symbol_block = new; |
| 2554 | symbol_block_index = 0; | 2547 | symbol_block_index = 0; |
| @@ -2629,7 +2622,6 @@ allocate_misc () | |||
| 2629 | struct marker_block *new; | 2622 | struct marker_block *new; |
| 2630 | new = (struct marker_block *) lisp_malloc (sizeof *new, | 2623 | new = (struct marker_block *) lisp_malloc (sizeof *new, |
| 2631 | MEM_TYPE_MISC); | 2624 | MEM_TYPE_MISC); |
| 2632 | VALIDATE_LISP_STORAGE (new, sizeof *new); | ||
| 2633 | new->next = marker_block; | 2625 | new->next = marker_block; |
| 2634 | marker_block = new; | 2626 | marker_block = new; |
| 2635 | marker_block_index = 0; | 2627 | marker_block_index = 0; |