diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2022-01-17 07:38:18 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2022-01-17 19:40:09 +0300 |
commit | f2a2e55e4206529782cdad538adc260439cd9cd2 (patch) | |
tree | 87befc48bc393bf8520fdbaf8077b6a7a7ec2467 /headers.c | |
parent | 703232dd4131d247a43a0b0506ffc5ab5669a191 (diff) | |
download | bdwgc-f2a2e55e4206529782cdad538adc260439cd9cd2.tar.gz |
Add I_HOLD_LOCK assertion to scratch_alloc/recycle and their callers
(refactoring)
* allchblk.c (setup_header, GC_get_first_part, GC_allochblk_nth): Add
assertion that the GC lock is held (I_HOLD_LOCK).
* alloc.c (GC_add_to_heap, GC_scratch_recycle_inner): Likewise.
* backgraph.c (push_in_progress, backwards_height): Likewise.
* blacklst.c (GC_bl_init_no_interiors, GC_bl_init): Likewise.
* dyn_load.c (GC_register_dynamic_libraries): Likewise.
* finalize.c (push_and_mark_object): Likewise.
* finalize.c [!GC_TOGGLE_REFS_NOT_NEEDED] (GC_mark_togglerefs):
Likewise.
* headers.c (GC_scratch_alloc, alloc_hdr, GC_init_headers,
GC_install_header): Likewise.
* include/private/gc_pmark.h (GC_MARK_FO): Likewise.
* malloc.c (GC_alloc_reclaim_list): Likewise.
* mark.c (GC_mark_some_inner, alloc_mark_stack): Likewise.
* mark_rts.c [DYNAMIC_LOADING || MSWIN32 || MSWINCE || PCR || CYGWIN32]
(GC_remove_tmp_roots): Likewise.
* mark_rts.c (GC_cond_register_dynamic_libraries, GC_push_roots):
Likewise.
* obj_map.c [MARK_BIT_PER_GRANULE] (GC_add_map_entry): Likewise.
* os_dep.c [NEED_PROC_MAPS && IA64] (backing_store_base_from_proc):
Likewise.
* os_dep.c [LINUX_STACKBOTTOM && IA64] (GC_get_register_stack_base):
Likewise.
* os_dep.c [MSWIN32] (GC_register_root_section): Likewise.
* os_dep.c [!OS2 && !MSWIN32 && !MSWINCE && !CYGWIN32]
(GC_register_data_segments): Likewise.
* os_dep.c [GWW_VDB] (GC_gww_dirty_init, GC_gww_read_dirty): Likewise.
* os_dep.c (GC_dirty_init): Likewise.
* os_dep.c [PROC_VDB] (GC_proc_read_dirty): Likewise.
* os_dep.c [SOFT_VDB] (soft_dirty_init, GC_soft_read_dirty): Likewise.
* os_dep.c [!GC_DISABLE_INCREMENTAL] (GC_read_dirty): Likewise.
* dyn_load.c [IRIX5 || USE_PROC_FOR_LIBRARIES && !LINUX]
(GC_register_dynamic_libraries): Round up size of buf local variable
to multiple of 8 bytes.
* headers.c (GC_install_header): Use EXPECT().
* malloc.c (GC_alloc_reclaim_list): Likewise.
* obj_map.c [MARK_BIT_PER_GRANULE] (GC_add_map_entry): Likewise.
* mark_rts.c [DYNAMIC_LOADING || MSWIN32 || MSWINCE || PCR || CYGWIN32]
(GC_remove_tmp_roots, GC_push_roots): Remove redundant comment.
* misc.c [GC_ASSERTIONS && GC_ALWAYS_MULTITHREADED] (GC_init): Wrap
calls of GC_get_main_stack_base(), GC_get_register_stack_base(),
GC_init_headers(), GC_dirty_init(), GC_register_data_segments(),
GC_bl_init(), GC_mark_init() into LOCK/UNLOCK.
* os_dep.c [OPENBSD] (GC_skip_hole_openbsd): Move sysconf() call to be
after the assertion that the GC lock is held.
* os_dep.c [HPUX_STACKBOTTOM] (GC_get_register_stack_base): Add
assertion that GC_stackbottom is set.
Diffstat (limited to 'headers.c')
-rw-r--r-- | headers.c | 9 |
1 files changed, 7 insertions, 2 deletions
@@ -107,6 +107,7 @@ GC_INNER ptr_t GC_scratch_alloc(size_t bytes) ptr_t result = GC_scratch_free_ptr; size_t bytes_to_get; + GC_ASSERT(I_HOLD_LOCK()); bytes = ROUNDUP_GRANULE_SIZE(bytes); for (;;) { GC_ASSERT((word)GC_scratch_end_ptr >= (word)result); @@ -166,6 +167,7 @@ static hdr * alloc_hdr(void) { hdr * result; + GC_ASSERT(I_HOLD_LOCK()); if (NULL == GC_hdr_free_list) { result = (hdr *)GC_scratch_alloc(sizeof(hdr)); } else { @@ -191,6 +193,7 @@ GC_INNER void GC_init_headers(void) { unsigned i; + GC_ASSERT(I_HOLD_LOCK()); GC_ASSERT(NULL == GC_all_nils); GC_all_nils = (bottom_index *)GC_scratch_alloc(sizeof(bottom_index)); if (GC_all_nils == NULL) { @@ -264,9 +267,11 @@ GC_INNER struct hblkhdr * GC_install_header(struct hblk *h) { hdr * result; - if (!get_index((word) h)) return(0); + GC_ASSERT(I_HOLD_LOCK()); + if (EXPECT(!get_index((word)h), FALSE)) return NULL; + result = alloc_hdr(); - if (result) { + if (EXPECT(result != NULL, TRUE)) { SET_HDR(h, result); # ifdef USE_MUNMAP result -> hb_last_reclaimed = (unsigned short)GC_gc_no; |