comparison src/alloc.c @ 56239:a446552d2240

(allocate_misc): Update total_free_markers. (free_misc): New function. (safe_alloca_unwind, free_marker): Use it.
author Kim F. Storm <storm@cua.dk>
date Thu, 24 Jun 2004 22:01:27 +0000
parents db1817b88294
children 1529ab7bab88 8e4ea1e2c254 59dcbfe97385
comparison
equal deleted inserted replaced
56238:f186f03b4d6b 56239:a446552d2240
588 register struct Lisp_Save_Value *p = XSAVE_VALUE (arg); 588 register struct Lisp_Save_Value *p = XSAVE_VALUE (arg);
589 589
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
596 597
597 /* Like malloc but used for allocating Lisp data. NBYTES is the 598 /* Like malloc but used for allocating Lisp data. NBYTES is the
2919 MEM_TYPE_MISC); 2920 MEM_TYPE_MISC);
2920 new->next = marker_block; 2921 new->next = marker_block;
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;
2936 }
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++;
2933 } 2949 }
2934 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. */
2976 void 2992 void
2977 free_marker (marker) 2993 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
2990 /* Return a newly created vector or string with specified arguments as 3001 /* Return a newly created vector or string with specified arguments as
2991 elements. If all the arguments are characters that can fit 3002 elements. If all the arguments are characters that can fit