diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2011-07-26 15:36:22 +0400 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2011-07-26 15:36:22 +0400 |
commit | 29be14a4aa2f73bf89396e50e5f5322fa9264b00 (patch) | |
tree | 85fb9a7aa0e14ef35f73be40b00e0aedcb37cf96 /headers.c | |
parent | e955362cfcef47fdc3ad2140f50ea4638fd86a4d (diff) | |
download | bdwgc-29be14a4aa2f73bf89396e50e5f5322fa9264b00.tar.gz |
gc5.3 tarball importgc5_3
Diffstat (limited to 'headers.c')
-rw-r--r-- | headers.c | 25 |
1 files changed, 16 insertions, 9 deletions
@@ -50,10 +50,8 @@ ptr_t h; static ptr_t scratch_free_ptr = 0; -ptr_t GC_scratch_end_ptr = 0; - -ptr_t GC_scratch_last_end_ptr = 0; - /* End point of last obtained scratch area */ +/* GC_scratch_last_end_ptr is end point of last obtained scratch area. */ +/* GC_scratch_end_ptr is end point of current scratch area. */ ptr_t GC_scratch_alloc(bytes) register word bytes; @@ -128,6 +126,13 @@ hdr * hhdr; hhdr -> hb_next = (struct hblk *) hdr_free_list; hdr_free_list = hhdr; } + +hdr * GC_invalid_header; + +#ifdef USE_HDR_CACHE + word GC_hdr_cache_hits = 0; + word GC_hdr_cache_misses = 0; +#endif void GC_init_headers() { @@ -138,6 +143,8 @@ void GC_init_headers() for (i = 0; i < TOP_SZ; i++) { GC_top_index[i] = GC_all_nils; } + GC_invalid_header = alloc_hdr(); + GC_invalidate_map(GC_invalid_header); } /* Make sure that there is a bottom level index block for address addr */ @@ -191,10 +198,10 @@ word addr; return(TRUE); } -/* Install a header for block h. */ -/* The header is uninitialized. */ -/* Returns FALSE on failure. */ -GC_bool GC_install_header(h) +/* Install a header for block h. */ +/* The header is uninitialized. */ +/* Returns the header or 0 on failure. */ +struct hblkhdr * GC_install_header(h) register struct hblk * h; { hdr * result; @@ -205,7 +212,7 @@ register struct hblk * h; # ifdef USE_MUNMAP result -> hb_last_reclaimed = GC_gc_no; # endif - return(result != 0); + return(result); } /* Set up forwarding counts for block h of size sz */ |