diff options
author | Rodrigo Kumpera <kumpera@gmail.com> | 2014-05-29 21:51:29 -0400 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2015-07-17 01:05:38 +0300 |
commit | 1c75653678541e5765330ccfcf300c4125a34dbd (patch) | |
tree | e66faf8aae48b1db210d3a92fb145f2b4b1f693e /finalize.c | |
parent | d00b16ac3ec59bc9c2a8c5e013916ca26b1df477 (diff) | |
download | bdwgc-1c75653678541e5765330ccfcf300c4125a34dbd.tar.gz |
Implement the finalization extension API
(Apply commit c429e9f from 'mono_libgc' branch.)
Conflicts:
finalize.c
include/gc.h
Diffstat (limited to 'finalize.c')
-rw-r--r-- | finalize.c | 13 |
1 files changed, 13 insertions, 0 deletions
@@ -263,6 +263,15 @@ GC_API int GC_CALL GC_unregister_disappearing_link(void * * link) return 1; } +/* Finalizer proc support */ +static void (*GC_object_finalized_proc) (GC_PTR obj); + +void +GC_set_finalizer_notify_proc (void (*proc) (GC_PTR obj)) +{ + GC_object_finalized_proc = proc; +} + #ifndef GC_LONG_REFS_NOT_NEEDED GC_API int GC_CALL GC_register_long_link(void * * link, const void * obj) { @@ -788,6 +797,10 @@ GC_INNER void GC_finalize(void) fo_set_next(prev_fo, next_fo); } GC_fo_entries--; + + if (GC_object_finalized_proc) + GC_object_finalized_proc (real_ptr); + /* Add to list of objects awaiting finalization. */ fo_set_next(curr_fo, GC_finalize_now); GC_finalize_now = curr_fo; |