diff --git a/fnlz_mlc.c b/fnlz_mlc.c index f7fd0db7a..005c08b63 100644 --- a/fnlz_mlc.c +++ b/fnlz_mlc.c @@ -49,6 +49,10 @@ static GC_bool done_init = FALSE; GC_API void GC_CALL GC_init_finalized_malloc(void) { + if (!GC_get_all_interior_pointers()) + ABORT("GC_set_all_interior_pointers(1) is required for finalized " + "object allocation."); + DCL_LOCK_STATE; GC_init(); /* In case it's not already done. */ diff --git a/include/gc_disclaim.h b/include/gc_disclaim.h index 2e8013d29..c35a451b6 100644 --- a/include/gc_disclaim.h +++ b/include/gc_disclaim.h @@ -22,7 +22,8 @@ /* Prepare the object kind used by GC_finalized_malloc. Call it from */ /* your initialization code or, at least, at some point before using */ -/* finalized allocations. The function is thread-safe. */ +/* finalized allocations. The function is thread-safe. All interior */ +/* pointers must be enabled (GC_set_all_interior_pointers(1)). */ GC_API void GC_CALL GC_init_finalized_malloc(void); /* Type of a disclaim call-back, always stored along with closure data */ diff --git a/tests/disclaim_bench.c b/tests/disclaim_bench.c index dfd71be3f..2dc3fb550 100644 --- a/tests/disclaim_bench.c +++ b/tests/disclaim_bench.c @@ -80,6 +80,7 @@ int main(int argc, char **argv) int model, model_min, model_max; testobj_t *keep_arr; + GC_set_all_interior_pointers(1); GC_INIT(); GC_init_finalized_malloc(); diff --git a/tests/disclaim_test.c b/tests/disclaim_test.c index 8e71828c7..4eeeaa686 100644 --- a/tests/disclaim_test.c +++ b/tests/disclaim_test.c @@ -140,6 +140,7 @@ int main(void) int i; #endif + GC_set_all_interior_pointers(1); GC_INIT(); GC_init_finalized_malloc();