summaryrefslogtreecommitdiff
path: root/finalize.c
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@gmail.com>2014-05-29 21:51:29 -0400
committerIvan Maidanski <ivmai@mail.ru>2015-07-17 01:05:38 +0300
commit1c75653678541e5765330ccfcf300c4125a34dbd (patch)
treee66faf8aae48b1db210d3a92fb145f2b4b1f693e /finalize.c
parentd00b16ac3ec59bc9c2a8c5e013916ca26b1df477 (diff)
downloadbdwgc-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.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/finalize.c b/finalize.c
index c2e8af02..33bac249 100644
--- a/finalize.c
+++ b/finalize.c
@@ -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;