[Gd-chatter] r11426 - trunk/fundev/sources/dfmc/c-run-time

hannes at gwydiondylan.org hannes at gwydiondylan.org
Sun Jul 29 21:26:32 CEST 2007


Author: hannes
Date: Sun Jul 29 21:26:31 2007
New Revision: 11426

Modified:
   trunk/fundev/sources/dfmc/c-run-time/run-time.c
   trunk/fundev/sources/dfmc/c-run-time/run-time.h
Log:
Job: fd

Implementing finalization with boehm-gc used by the c-back-end.

This patch was submitted by Thomas Christian Chust, thanks.


Modified: trunk/fundev/sources/dfmc/c-run-time/run-time.c
==============================================================================
--- trunk/fundev/sources/dfmc/c-run-time/run-time.c	(original)
+++ trunk/fundev/sources/dfmc/c-run-time/run-time.c	Sun Jul 29 21:26:31 2007
@@ -95,6 +95,37 @@
   return(header); 
 }
 
+static struct _mps_finalization_queue {
+  D first;
+  struct _mps_finalization_queue *rest;
+} * mps_finalization_queue = NULL;
+
+static void mps_finalization_proc(D obj, void *data) {
+  struct _mps_finalization_queue *new_finalization_queue =
+    GC_NEW(struct _mps_finalization_queue);
+  
+  new_finalization_queue->first = obj;
+  do {
+    new_finalization_queue->rest = mps_finalization_queue;
+  } while (!CONDITIONAL_UPDATE(mps_finalization_queue,
+                               new_finalization_queue,
+                               new_finalization_queue->rest));
+}
+
+void primitive_mps_finalize(void *obj) {
+  GC_register_finalizer(obj, mps_finalization_proc, NULL, NULL, NULL);
+}
+  
+void* primitive_mps_finalization_queue_first() {
+  if (mps_finalization_queue) {
+    D obj = mps_finalization_queue->first;
+    mps_finalization_queue = mps_finalization_queue->rest;
+    return(obj);
+  }
+  else
+    return(NULL);
+}
+
 void  primitive_mps_collect (DBOOL ignored) {
   ignore(ignored);
   GC_gcollect();

Modified: trunk/fundev/sources/dfmc/c-run-time/run-time.h
==============================================================================
--- trunk/fundev/sources/dfmc/c-run-time/run-time.h	(original)
+++ trunk/fundev/sources/dfmc/c-run-time/run-time.h	Sun Jul 29 21:26:31 2007
@@ -1044,8 +1044,8 @@
 #define primitive_gc_state() (I(0)) /* !@#$ DUMMY DEFN */
 #define primitive_pin_object(x) (x)
 extern void primitive_unpin_object(D);
-#define primitive_mps_finalize(x) { }
-#define primitive_mps_finalization_queue_first() ((D)0)
+extern void primitive_mps_finalize(D);
+extern void* primitive_mps_finalization_queue_first();
 #define primitive_mps_park()
 #define primitive_mps_clamp()
 #define primitive_mps_release()



More information about the chatter mailing list