Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/libgc
diff options
context:
space:
mode:
authorRodrigo Kumpera <kumpera@gmail.com>2014-05-30 05:51:29 +0400
committerRodrigo Kumpera <kumpera@gmail.com>2014-05-30 05:52:29 +0400
commit2eaf6e71b3294591c6bd42314fc399e9af760bb9 (patch)
tree2c5a26db467da2398caa559cf20d4975ff4835f3 /libgc
parenta153eed8354a602b8fe02c8e5a9b9919d85067f7 (diff)
[boehm] Implement the finalization extension API.
Diffstat (limited to 'libgc')
-rw-r--r--libgc/finalize.c13
-rw-r--r--libgc/include/gc.h4
2 files changed, 17 insertions, 0 deletions
diff --git a/libgc/finalize.c b/libgc/finalize.c
index 91f6970180c..5626e872137 100644
--- a/libgc/finalize.c
+++ b/libgc/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;
diff --git a/libgc/include/gc.h b/libgc/include/gc.h
index a3eb3c2dc06..4693a3d9a54 100644
--- a/libgc/include/gc.h
+++ b/libgc/include/gc.h
@@ -778,6 +778,10 @@ GC_API int GC_unregister_long_link GC_PROTO((GC_PTR * /* link */));
GC_API void GC_toggleref_register_callback GC_PROTO((int (*proccess_toggleref) (GC_PTR obj)));
GC_API void GC_toggleref_add (GC_PTR object, int strong_ref);
+/* finalizer callback support */
+GC_API void GC_set_finalizer_notify_proc GC_PROTO((void (*object_finalized) (GC_PTR obj)));
+
+
/* Returns !=0 if GC_invoke_finalizers has something to do. */
GC_API int GC_should_invoke_finalizers GC_PROTO((void));