diff options
| author | Kim F. Storm | 2004-06-24 22:02:23 +0000 |
|---|---|---|
| committer | Kim F. Storm | 2004-06-24 22:02:23 +0000 |
| commit | 7b7990cc6709b39c98d5f781daa47a2afe6a6f8b (patch) | |
| tree | 46ccc51457657dc81bee2e57dff7d3977806c23a /src/alloc.c | |
| parent | 69968400c3db984a9dc6b5a5b39441c021952bc9 (diff) | |
| download | emacs-7b7990cc6709b39c98d5f781daa47a2afe6a6f8b.tar.gz emacs-7b7990cc6709b39c98d5f781daa47a2afe6a6f8b.zip | |
(allocate_misc): Update total_free_markers.
(free_misc): New function.
(safe_alloca_unwind, free_marker): Use it.
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/alloc.c b/src/alloc.c index 06f7eb6174e..7ec882f3dd3 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -590,6 +590,7 @@ safe_alloca_unwind (arg) | |||
| 590 | p->dogc = 0; | 590 | p->dogc = 0; |
| 591 | xfree (p->pointer); | 591 | xfree (p->pointer); |
| 592 | p->pointer = 0; | 592 | p->pointer = 0; |
| 593 | free_misc (arg); | ||
| 593 | return Qnil; | 594 | return Qnil; |
| 594 | } | 595 | } |
| 595 | 596 | ||
| @@ -2921,17 +2922,32 @@ allocate_misc () | |||
| 2921 | marker_block = new; | 2922 | marker_block = new; |
| 2922 | marker_block_index = 0; | 2923 | marker_block_index = 0; |
| 2923 | n_marker_blocks++; | 2924 | n_marker_blocks++; |
| 2925 | total_free_markers += MARKER_BLOCK_SIZE; | ||
| 2924 | } | 2926 | } |
| 2925 | XSETMISC (val, &marker_block->markers[marker_block_index]); | 2927 | XSETMISC (val, &marker_block->markers[marker_block_index]); |
| 2926 | marker_block_index++; | 2928 | marker_block_index++; |
| 2927 | } | 2929 | } |
| 2928 | 2930 | ||
| 2931 | --total_free_markers; | ||
| 2929 | consing_since_gc += sizeof (union Lisp_Misc); | 2932 | consing_since_gc += sizeof (union Lisp_Misc); |
| 2930 | misc_objects_consed++; | 2933 | misc_objects_consed++; |
| 2931 | XMARKER (val)->gcmarkbit = 0; | 2934 | XMARKER (val)->gcmarkbit = 0; |
| 2932 | return val; | 2935 | return val; |
| 2933 | } | 2936 | } |
| 2934 | 2937 | ||
| 2938 | /* Free a Lisp_Misc object */ | ||
| 2939 | |||
| 2940 | void | ||
| 2941 | free_misc (misc) | ||
| 2942 | Lisp_Object misc; | ||
| 2943 | { | ||
| 2944 | XMISC (misc)->u_marker.type = Lisp_Misc_Free; | ||
| 2945 | XMISC (misc)->u_free.chain = marker_free_list; | ||
| 2946 | marker_free_list = XMISC (misc); | ||
| 2947 | |||
| 2948 | total_free_markers++; | ||
| 2949 | } | ||
| 2950 | |||
| 2935 | /* Return a Lisp_Misc_Save_Value object containing POINTER and | 2951 | /* Return a Lisp_Misc_Save_Value object containing POINTER and |
| 2936 | INTEGER. This is used to package C values to call record_unwind_protect. | 2952 | INTEGER. This is used to package C values to call record_unwind_protect. |
| 2937 | The unwind function can get the C values back using XSAVE_VALUE. */ | 2953 | The unwind function can get the C values back using XSAVE_VALUE. */ |
| @@ -2978,12 +2994,7 @@ free_marker (marker) | |||
| 2978 | Lisp_Object marker; | 2994 | Lisp_Object marker; |
| 2979 | { | 2995 | { |
| 2980 | unchain_marker (XMARKER (marker)); | 2996 | unchain_marker (XMARKER (marker)); |
| 2981 | 2997 | free_misc (marker); | |
| 2982 | XMISC (marker)->u_marker.type = Lisp_Misc_Free; | ||
| 2983 | XMISC (marker)->u_free.chain = marker_free_list; | ||
| 2984 | marker_free_list = XMISC (marker); | ||
| 2985 | |||
| 2986 | total_free_markers++; | ||
| 2987 | } | 2998 | } |
| 2988 | 2999 | ||
| 2989 | 3000 | ||