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

github.com/Unity-Technologies/bdwgc.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'finalize.c')
-rw-r--r--finalize.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/finalize.c b/finalize.c
index 8790a5b9..6d04c2f9 100644
--- a/finalize.c
+++ b/finalize.c
@@ -1264,6 +1264,14 @@ GC_INNER void GC_finalize(void)
#endif /* !JAVA_FINALIZATION_NOT_NEEDED */
+static volatile GC_bool GC_interrupt_finalizers = FALSE;
+
+void
+GC_set_interrupt_finalizers(void)
+{
+ GC_interrupt_finalizers = TRUE;
+}
+
/* Returns true if it is worth calling GC_invoke_finalizers. (Useful if */
/* finalizers can only be called from some kind of "safe state" and */
/* getting into that safe state is expensive.) */
@@ -1284,7 +1292,7 @@ GC_API int GC_CALL GC_invoke_finalizers(void)
word bytes_freed_before = 0; /* initialized to prevent warning. */
DCL_LOCK_STATE;
- while (GC_should_invoke_finalizers()) {
+ while (GC_should_invoke_finalizers() && !GC_interrupt_finalizers) {
struct finalizable_object * curr_fo;
# ifdef THREADS