summaryrefslogtreecommitdiff
path: root/typd_mlc.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2018-05-18 10:58:54 +0300
committerIvan Maidanski <ivmai@mail.ru>2018-05-18 10:58:54 +0300
commit73d30d2b4f7b16473c38036a5ad409deb296ac4a (patch)
tree2a7af440e09d179a7bbad1da6b5c542fd9c900dc /typd_mlc.c
parentf30c01500208d4c459986a32cd4e36bc2a483789 (diff)
downloadbdwgc-73d30d2b4f7b16473c38036a5ad409deb296ac4a.tar.gz
Fix missing GC_dirty calls for GC-allocated objects used internally
This change matters only in case of MANUAL_VDB mode. * finalize.c (GC_grow_table, GC_register_disappearing_link, GC_unregister_disappearing_link_inner, GC_process_togglerefs, GC_toggleref_add, GC_move_disappearing_link_inner, GC_register_finalizer_inner, ITERATE_DL_HASHTBL_END, DELETE_DL_HASHTBL_ENTRY, GC_finalize, GC_enqueue_all_finalizers): Call GC_dirty where needed. * gcj_mlc.c [GC_GCJ_SUPPORT] (GC_gcj_malloc, GC_debug_gcj_malloc, GC_gcj_malloc_ignore_off_page): Likewise. * pthread_start.c [GC_PTHREADS && !GC_WIN32_THREADS] (GC_inner_start_routine): Likewise. * pthread_support.c [GC_PTHREADS && !GC_WIN32_THREADS] (GC_new_thread, GC_delete_thread, GC_delete_gc_thread): Likewise. * specific.c [USE_CUSTOM_SPECIFIC] (GC_setspecific, GC_remove_specific_after_fork): Likewise. * typd_mlc.c (GC_make_sequence_descriptor, GC_malloc_explicitly_typed, GC_malloc_explicitly_typed_ignore_off_page, GC_calloc_explicitly_typed): Likewise. * win32_threads.c (GC_new_thread, GC_delete_gc_thread_no_free, GC_delete_thread, GC_CreateThread): Likewise. * win32_threads.c [!CYGWIN32 && !MSWINCE && !MSWIN_XBOX1] (GC_beginthreadex): Likewise. * win32_threads.c [GC_PTHREADS] (GC_pthread_create, GC_pthread_start_inner): Likewise. * include/gc_inline.h (GC_FAST_MALLOC_GRANS): Call GC_end_stubborn_change(my_fl) after GC_FAST_M_AO_STORE() call unless kind is GC_I_PTRFREE. * include/gc_inline.h (GC_CONS): Call GC_end_stubborn_change(result).
Diffstat (limited to 'typd_mlc.c')
-rw-r--r--typd_mlc.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/typd_mlc.c b/typd_mlc.c
index 33c6b809..823447b0 100644
--- a/typd_mlc.c
+++ b/typd_mlc.c
@@ -325,6 +325,7 @@ GC_make_sequence_descriptor(complex_descriptor *first,
result -> sd_tag = SEQUENCE_TAG;
result -> sd_first = first;
result -> sd_second = second;
+ GC_dirty(result);
}
return((complex_descriptor *)result);
}
@@ -602,6 +603,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_malloc_explicitly_typed(size_t lb,
/* the former might be updated asynchronously. */
lg = BYTES_TO_GRANULES(GC_size(op));
op[GRANULES_TO_WORDS(lg) - 1] = d;
+ GC_dirty(op + GRANULES_TO_WORDS(lg) - 1);
return op;
}
@@ -642,6 +644,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL
lg = BYTES_TO_GRANULES(GC_size(op));
}
((word *)op)[GRANULES_TO_WORDS(lg) - 1] = d;
+ GC_dirty(op + GRANULES_TO_WORDS(lg) - 1);
return op;
}
@@ -695,6 +698,7 @@ GC_API GC_ATTR_MALLOC void * GC_CALL GC_calloc_explicitly_typed(size_t n,
size_t lw = GRANULES_TO_WORDS(lg);
op[lw - 1] = (word)complex_descr;
+ GC_dirty(op + lw - 1);
/* Make sure the descriptor is cleared once there is any danger */
/* it may have been collected. */
if (EXPECT(GC_general_register_disappearing_link(