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-06-01 10:02:58 +0300
commitc429e9f5b7cd3aa74049d3d6ed1eb4e81e8dbde7 (patch)
tree2a9cfd1b8e33de304cc92c265224cb2531d8635e /finalize.c
parent960f233f3425e152b636cfe221b40fe3d63ece02 (diff)
downloadbdwgc-c429e9f5b7cd3aa74049d3d6ed1eb4e81e8dbde7.tar.gz
Implement the finalization extension API.
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 91f69701..5626e872 100644
--- a/finalize.c
+++ b/finalize.c
@@ -366,6 +366,15 @@ GC_process_togglerefs (void)
GC_toggleref_array_size = w;
}
+/* 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;
+}
+
static void push_and_mark_object (GC_PTR p)
{
@@ -877,6 +886,10 @@ void GC_finalize()
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;